Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
7327816
build(deps): bump org.springframework.boot:spring-boot-starter-parent…
dependabot[bot] Nov 23, 2025
c187ca8
build(deps): bump org.springframework.boot:spring-boot-starter-parent…
dependabot[bot] Nov 23, 2025
98dd5ba
build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui (…
dependabot[bot] Nov 23, 2025
26cccac
chore: upgrade version to 3.3.0-SNAPSHOT and update changelog for Spr…
pwannenmacher Nov 23, 2025
a41d894
chore: update dependencies in pom.xml for Spring Boot 4 compatibility
pwannenmacher Nov 23, 2025
611f0c6
chore: Replace old starters
pwannenmacher Nov 24, 2025
52f8fbf
refactor: update for Jackson 3 compatibility
pwannenmacher Nov 25, 2025
d9087b5
fix(deps): update dependency net.kaczmarzyk:specification-arg-resolve…
renovate[bot] Nov 26, 2025
581053e
chore: upgrade version to 3.4.0-SNAPSHOT in UUID Demo
pwannenmacher Nov 27, 2025
4d15570
refactor: add @Nonnull annotation to getAuthorities method
pwannenmacher Nov 27, 2025
1614da4
refactor: remove unused test compilation execution from Maven configu…
pwannenmacher Nov 28, 2025
aa7b9e4
refactor: update beforeBodyWrite method to avoid deprecated MappingJa…
pwannenmacher Nov 28, 2025
7c16821
refactor: update deprecated configuration
pwannenmacher Nov 28, 2025
786620d
refactor: update AccessAwareJsonFilter and AccessAwareJsonViewAdvice …
pwannenmacher Dec 1, 2025
d1c1342
chore: upgrade dependencies to Spring Boot 4.0.1, Sentry 8.29.0, Spri…
pwannenmacher Jan 12, 2026
36a03e7
refactor: enhance SimpleMailService to support mail service enable/di…
pwannenmacher Jan 12, 2026
5c8fe67
refactor: update jsonPath assertions to use value() method for improv…
pwannenmacher Jan 12, 2026
c1c4863
refactor: update import for EntityScan to use persistence package
pwannenmacher Jan 12, 2026
760965b
chore: workaround for failing record to json conversion
pwannenmacher Jan 15, 2026
924d135
chore: upgrade Spring Boot to 4.0.2 and update related dependencies
pwannenmacher Jan 31, 2026
746dbeb
chore: upgrade Spring Boot to 4.0.5 and update springdoc-openapi to 3…
pwannenmacher Apr 15, 2026
636d9ea
refactor: update NonNull annotations to use jspecify package
pwannenmacher Apr 15, 2026
006d4b6
chore(test): add api_token and api_token_rights tables to schema
pwannenmacher Apr 23, 2026
e8e6cd8
refactor(test): unify integration test setup with AbstractEssenciumIn…
pwannenmacher Apr 23, 2026
26be4a7
refactor(test): move OAuth2SuccessHandlerTest to correct package
pwannenmacher Apr 23, 2026
ce2a084
refactor(test): update OAuth2SuccessHandlerTest to use UserServiceStu…
pwannenmacher Apr 23, 2026
d474178
refactor(test): restructure integration test app packages for consist…
pwannenmacher Apr 23, 2026
c40c9f0
chore(deps): bump git-code-format-maven-plugin and google-java-format…
pwannenmacher Apr 23, 2026
d4a046f
chore(test): update AutoConfigureMockMvc import for Spring Boot 4.x c…
pwannenmacher Apr 28, 2026
7c321a0
chore(deps): upgrade project version to 4.0.0
pwannenmacher May 8, 2026
1feaa85
chore: update DataNamingConfig for Hibernate 7 compatibility and remo…
pwannenmacher May 8, 2026
647b2df
chore: update SQL initialization script to use 'if not exists' for ta…
pwannenmacher May 8, 2026
d1071d6
chore(test): refactor EssenciumSchedulerIntegrationTest to extend bas…
pwannenmacher May 8, 2026
f16a851
chore(test): refactor BatchSizeIntegrationTest to extend AbstractEsse…
pwannenmacher May 8, 2026
50ecedd
chore(test): enable mail properties in SimpleMailServiceTest
pwannenmacher May 8, 2026
258959b
chore: set default value for enabled property in MailProperties
pwannenmacher May 8, 2026
41a46d0
chore: update migration documentation for Hibernate 7 and Spring Boot 4
pwannenmacher May 8, 2026
c5022c0
chore: implement equals and hashCode methods in BasicRepresentation
pwannenmacher May 8, 2026
c8f4bca
chore: upgrade Spring Boot version to 4.0.6
pwannenmacher May 8, 2026
c22b171
chore: update import for ErrorAttributes to use webmvc package
pwannenmacher May 21, 2026
0f90108
chore: fix integration tests
pwannenmacher May 21, 2026
c8712fa
chore: upgrade specification-arg-resolver to version 4.1.0
pwannenmacher May 29, 2026
3deafd5
chore: add setup method to EssenciumSchedulerIntegrationTest for test…
pwannenmacher May 29, 2026
efcd1c3
chore: update application configuration for test environment
pwannenmacher May 29, 2026
6a65568
chore: update accessToken retrieval to use asString method
pwannenmacher May 29, 2026
eee5147
chore: remove unused tearDown method from EssenciumSchedulerIntegrati…
pwannenmacher May 29, 2026
cfc9649
chore: simplify PathVariable annotations in AbstractUserController
pwannenmacher May 29, 2026
329a15b
chore: update token retrieval methods to use String keys instead of L…
pwannenmacher May 29, 2026
377effb
chore: enhance SimpleMailServiceTest with additional test cases and t…
pwannenmacher May 29, 2026
f2efabd
chore: refactor BasicRepresentation to use record for improved readab…
pwannenmacher May 29, 2026
f17b06d
chore: enhance AccessAwareJsonViewAdvice to support dynamic type dese…
pwannenmacher May 29, 2026
5b18ef1
chore: remove unnecessary Testcontainers annotation from EssenciumSch…
pwannenmacher Jun 1, 2026
f9c773c
chore: simplify access control logic in AccessAwareJsonFilter
pwannenmacher Jun 1, 2026
02b28fe
chore: remove duplicate mock setup for debugReceiver in SimpleMailSer…
pwannenmacher Jun 1, 2026
4d20966
chore: update Versions in Changelog
pwannenmacher Jun 1, 2026
9089c72
chore: refactor AuditingConfig to simplify current auditor retrieval
pwannenmacher Jun 1, 2026
d2eb7c6
chore: refactor AccessAwareJsonViewAdvice to simplify role-based filt…
pwannenmacher Jun 1, 2026
17fe22d
chore: update RestExceptionHandler to use WebProperties instead of Se…
pwannenmacher Jun 2, 2026
2f6a9b9
chore: remove deprecated hibernate-jpamodelgen dependency from pom.xml
pwannenmacher Jun 2, 2026
b3df013
test: add AccessAwareJsonFilter unit tests
pwannenmacher Jun 2, 2026
004a452
chore: upgrade Spring Boot to 4.1.0 and Sentry to 8.43.2
pwannenmacher Jun 11, 2026
85c0d0d
chore: update Hibernate configuration to replace globally_quoted_iden…
pwannenmacher Jun 11, 2026
071c58d
chore: add foreign and native tables to database schema; update appli…
pwannenmacher Jun 11, 2026
54e9fa2
chore: remove redundant spring-boot-starter-jackson dependency
pwannenmacher Jun 11, 2026
f004e11
chore: enhance API documentation for entity IDs to support both numer…
pwannenmacher Jun 11, 2026
8a63120
chore: update AccessAwareJsonViewAdvice to support Jackson3 HttpMessa…
pwannenmacher Jun 11, 2026
64bb116
test: add unit tests for AccessAwareJsonViewAdvice
pwannenmacher Jun 11, 2026
3f097a2
feat: add JsonAllowForController and payload for role-based visibility
pwannenmacher Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
# Changelog

## Version `4.0.0-SNAPSHOT` (unreleased)

⚠️ **Breaking Change** ⚠️

### 🌟 Features

- **Spring Boot 4**
- changed from `org.hibernate:hibernate-jpamodelgen` to `hibernate-processor`
- changed from `org.springframework.boot:spring-boot-starter-aop` to `spring-boot-starter-aspectj`

### 🐞 Bug Fixes

### 🔨 Dependency Upgrades

- upgraded org.springframework.boot:spring-boot-starter-parent from 3.5.14 to 4.1.0
- upgraded org.springdoc:springdoc-openapi-starter-webmvc-ui from 2.8.17 to 3.0.3
- upgraded net.kaczmarzyk:specification-arg-resolver from 3.4.0 to 4.1.0
- upgraded io.sentry:sentry-spring-boot-starter-jakarta from 8.43.0 to 8.43.2

## Version `3.4.2-SNAPSHOT`

### 🌟 Features
Expand Down Expand Up @@ -67,7 +86,6 @@
- The previous endpoint `POST /sentry/feedback` now only supports the new format.
- Until the in-house implementation is completely removed, the old format will still be accepted at the endpoint `POST /sentry/feedback`.


### 🐞 Bug Fixes

- Prevent validation error handling from crashing when a validation error has no arguments.
Expand Down
43 changes: 43 additions & 0 deletions MIGRATION.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,48 @@
# Migration Guide

## Version `4.0.0-SNAPSHOT` (unreleased)

### Hibernate 7: Remove `globally_quoted_identifiers`

Spring Boot 4 upgrades to Hibernate 7, which replaces the deprecated `CamelCaseToUnderscoresNamingStrategy` with `PhysicalNamingStrategySnakeCaseImpl`.

**The key behavioral difference:** the new `PhysicalNamingStrategySnakeCaseImpl` skips the camelCase→snake_case conversion for **quoted** identifiers and returns them unchanged. The old `CamelCaseToUnderscoresNamingStrategy` always applied the conversion regardless of quoting status.

`hibernate.globally_quoted_identifiers=true` marks **all** identifiers as quoted — including those derived internally from class and field names (e.g. `SessionToken`, `issuedAt`). The combination of both settings causes:

- `SessionToken` → `SESSIONTOKEN` instead of `SESSION_TOKEN` (no underscore)
- `issuedAt` → `issuedAt` instead of `issued_at` (no conversion)

resulting in `SchemaManagementException` or incorrect table and column names.

**Action required:** Remove `hibernate.globally_quoted_identifiers=true` to avoid disabling Hibernate 7 snake_case conversion for quoted identifiers.

For H2-based profiles that need quoting for reserved keywords (for example columns named `key` or `value`), use targeted keyword quoting instead of global quoting:

```yaml
# Before (remove)
spring:
jpa:
properties:
hibernate:
globally_quoted_identifiers: true

# After (H2-friendly replacement)
spring:
jpa:
properties:
hibernate:
auto_quote_keyword: true
```

This keeps reserved-word handling intact while preserving Hibernate 7 camelCase to snake_case conversion for regular identifiers.

`auto_quote_keyword` quotes only identifiers that are SQL keywords for the active dialect (for example `key`, `value`) instead of forcing quotes for every table/column name.

### Hibernate 7: Physical naming strategy for table names

The internal implementation of `DataNamingConfig` has been updated: `PhysicalNamingStrategySnakeCaseImpl` (the replacement for the deprecated `CamelCaseToUnderscoresNamingStrategy`) skips snake_case conversion for quoted identifiers. In the current `DataNamingConfig` implementation, `toPhysicalTableName` still delegates to the superclass strategy, so custom naming strategies must not assume quoted identifiers will be unquoted automatically before conversion. Applications that override `DataNamingConfig` or configure the naming strategy directly and require snake_case conversion for quoted table identifiers must handle that explicitly.

## Version `3.4.0`

### JWT Token Verification Changes
Expand Down
2 changes: 1 addition & 1 deletion docs/pages/devguide/started/configuration/variables.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ spring:
ddl-auto: update # Auto update DDL
properties:
hibernate:
globally_quoted_identifiers: true # Quote all identifiers
auto_quote_keyword: true # Quote only SQL keywords
freemarker:
enabled: false # disable web mvc template rendering
mvc:
Expand Down
13 changes: 7 additions & 6 deletions essencium-backend-development-uuid/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,17 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.15</version>
<version>4.1.0</version>
</parent>

<groupId>de.frachtwerk</groupId>
<artifactId>essencium-backend-development-uuid</artifactId>
<version>3.4.2-SNAPSHOT</version>
<version>4.0.0-SNAPSHOT</version>

<name>${project.groupId}:${project.artifactId}</name>
<description>Essencium-backend-development-UUID represents a sample project for development purposes based on
Essencium Backend. It uses UUID as ID type for entities.
<description>
Essencium-backend-development-UUID represents a sample project for development purposes based on Essencium
Backend. It uses UUID as ID type for entities.
</description>
<url>https://www.frachtwerk.de</url>

Expand Down Expand Up @@ -161,7 +162,7 @@
<plugin>
<groupId>com.cosium.code</groupId>
<artifactId>git-code-format-maven-plugin</artifactId>
<version>5.6</version>
<version>6.0</version>
<executions>
<execution>
<id>install-formatter-hook</id>
Expand All @@ -180,7 +181,7 @@
<dependency>
<groupId>com.cosium.code</groupId>
<artifactId>google-java-format</artifactId>
<version>5.6</version>
<version>6.0</version>
</dependency>
</dependencies>
</plugin>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
import io.swagger.v3.oas.annotations.servers.Server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.persistence.autoconfigure.EntityScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,24 @@ logging:

server:
port: 8098
error:
include-stacktrace: always

spring:
h2:
console:
enabled: true
settings:
trace: false
web:
error:
include-stacktrace: always
mvc:
log-request-details: true

springdoc:
api-docs:
enabled: true
swagger-ui:
enabled: true

mail:
# See https://ethereal.email
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ spring:
driver-class-name: org.h2.Driver
username: sa
password: password
properties.hibernate.auto_quote_keyword: true

jpa:
database-platform: org.hibernate.dialect.H2Dialect
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@ logging:

server:
port: 8098
error:
include-message: always
include-stacktrace: never

spring:
profiles:
Expand All @@ -41,15 +38,12 @@ spring:
generate-ddl: true
hibernate:
ddl-auto: update
properties:
hibernate:
globally_quoted_identifiers: true
freemarker:
enabled: false # disable web mvc template rendering

mvc:
pathmatch:
matching-strategy: ant_path_matcher
dispatch-trace-request: true
log-request-details: false

flyway:
enabled: false
Expand All @@ -58,6 +52,16 @@ spring:
url: ${spring.datasource.url}
baselineOnMigrate: true
validate-on-migrate: true
web:
error:
include-message: always
include-stacktrace: never

springdoc:
api-docs:
enabled: false
swagger-ui:
enabled: false

mail:
host: localhost
Expand Down
11 changes: 6 additions & 5 deletions essencium-backend-development/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,16 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.15</version>
<version>4.1.0</version>
</parent>

<groupId>de.frachtwerk</groupId>
<artifactId>essencium-backend-development</artifactId>
<version>3.4.2-SNAPSHOT</version>
<version>4.0.0-SNAPSHOT</version>

<name>${project.groupId}:${project.artifactId}</name>
<description>Essencium-backend-development represents a sample project for development purposes based on Essencium
<description>
Essencium-backend-development represents a sample project for development purposes based on Essencium
Backend. It uses Long as ID type for entities.
</description>
<url>https://www.frachtwerk.de</url>
Expand Down Expand Up @@ -161,7 +162,7 @@
<plugin>
<groupId>com.cosium.code</groupId>
<artifactId>git-code-format-maven-plugin</artifactId>
<version>5.6</version>
<version>6.0</version>
<executions>
<execution>
<id>install-formatter-hook</id>
Expand All @@ -180,7 +181,7 @@
<dependency>
<groupId>com.cosium.code</groupId>
<artifactId>google-java-format</artifactId>
<version>5.6</version>
<version>6.0</version>
</dependency>
</dependencies>
</plugin>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
import io.swagger.v3.oas.annotations.servers.Server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.persistence.autoconfigure.EntityScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,24 @@ logging:

server:
port: 8098
error:
include-stacktrace: always

spring:
h2:
console:
enabled: true
settings:
trace: false
web:
error:
include-stacktrace: always
mvc:
log-request-details: true

springdoc:
api-docs:
enabled: true
swagger-ui:
enabled: true

mail:
# See https://ethereal.email
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ spring:
driver-class-name: org.h2.Driver
username: sa
password: password

jpa:
database-platform: org.hibernate.dialect.H2Dialect
generate-ddl: true
hibernate:
ddl-auto: update
properties.hibernate.auto_quote_keyword: true
20 changes: 12 additions & 8 deletions essencium-backend-development/src/main/resources/application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@ logging:

server:
port: 8098
error:
include-message: always
include-stacktrace: never

spring:
profiles:
Expand All @@ -41,15 +38,12 @@ spring:
generate-ddl: true
hibernate:
ddl-auto: update
properties:
hibernate:
globally_quoted_identifiers: true
freemarker:
enabled: false # disable web mvc template rendering

mvc:
pathmatch:
matching-strategy: ant_path_matcher
dispatch-trace-request: true
log-request-details: false

flyway:
enabled: false
Expand All @@ -58,6 +52,16 @@ spring:
url: ${spring.datasource.url}
baselineOnMigrate: true
validate-on-migrate: true
web:
error:
include-message: always
include-stacktrace: never

springdoc:
api-docs:
enabled: false
swagger-ui:
enabled: false

mail:
host: localhost
Expand Down
Loading
Loading