quarkusio/quarkus · error · HibernateException
Legacy setting being used: 'hibernate.ejb.session_factory_ob
Error message
Legacy setting being used: 'hibernate.ejb.session_factory_observer' was replaced by '<SESSION_FACTORY_OBSERVER>'. Please update your configuration.
What it means
FastBootEntityManagerFactoryBuilder.populate rejects the deprecated legacy setting 'hibernate.ejb.session_factory_observer', which older Hibernate ORM (4.x) used for attaching SessionFactoryObservers. Quarkus's fast-boot builder throws HibernateException to force migration to the modern org.hibernate.cfg.AvailableSettings.SESSION_FACTORY_OBSERVER key.
Source
Thrown at extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootEntityManagerFactoryBuilder.java:156
}
private String getExceptionHeader() {
return "[PersistenceUnit: " + puDescriptor.getName() + "] ";
}
protected void populate(String persistenceUnitName, SessionFactoryOptionsBuilder options, StandardServiceRegistry ssr) {
// will use user override value or default to false if not supplied to follow
// JPA spec.
final boolean jtaTransactionAccessEnabled = runtimeSettings.getBoolean(
org.hibernate.cfg.AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS);
if (!jtaTransactionAccessEnabled) {
options.disableJtaTransactionAccess();
}
//Check for use of deprecated org.hibernate.jpa.AvailableSettings.SESSION_FACTORY_OBSERVER
final Object legacyObserver = runtimeSettings.get("hibernate.ejb.session_factory_observer");
if (legacyObserver != null) {
throw new HibernateException("Legacy setting being used: 'hibernate.ejb.session_factory_observer' was replaced by '"
+ org.hibernate.cfg.AvailableSettings.SESSION_FACTORY_OBSERVER + "'. Please update your configuration.");
}
// Locate and apply any requested SessionFactoryObserver
final Object sessionFactoryObserverSetting = runtimeSettings
.get(org.hibernate.cfg.AvailableSettings.SESSION_FACTORY_OBSERVER);
if (sessionFactoryObserverSetting != null) {
final StrategySelector strategySelector = ssr.getService(StrategySelector.class);
final SessionFactoryObserver suppliedSessionFactoryObserver = strategySelector
.resolveStrategy(SessionFactoryObserver.class, sessionFactoryObserverSetting);
options.addSessionFactoryObservers(suppliedSessionFactoryObserver);
}
options.addSessionFactoryObservers(new ServiceRegistryCloser());
//New in ORM 6.2:
options.addSessionFactoryObservers(new SessionFactoryObserverForNamedQueryValidation(metadata));View on GitHub (pinned to e1c734241f)
Solutions
- Remove hibernate.ejb.session_factory_observer from persistence.xml/properties.
- Register the observer via the modern key org.hibernate.cfg.AvailableSettings.SESSION_FACTORY_OBSERVER (hibernate.session_factory_observer) if truly needed.
- Prefer Quarkus-native mechanisms (CDI observers / build-time integration) instead of raw Hibernate observer settings.
Example fix
<!-- before --> <property name="hibernate.ejb.session_factory_observer" value="com.acme.MyObserver"/> <!-- after --> <property name="hibernate.session_factory_observer" value="com.acme.MyObserver"/>
Defensive patterns
Strategy: validation
Validate before calling
grep -rn "hibernate.ejb." persistence.xml src/main/resources/
Prevention
- Migrate all hibernate.ejb.* keys to hibernate.* equivalents when moving to Quarkus
- Keep persistence.xml minimal; prefer quarkus.hibernate-orm.* config properties
- Search dependencies' hibernate.properties for legacy keys
When it happens
Trigger: A persistence.xml, quarkus.hibernate-orm.persistence-unit.<name>.properties entry, or hibernate.properties still specifies hibernate.ejb.session_factory_observer; a legacy library injects the old key into runtime settings.
Common situations: Migrating a legacy Spring/Hibernate 4 config into Quarkus; copy-pasted persistence.xml carrying obsolete hibernate.ejb.* properties.
Related errors
- quarkus.datasource.url and quarkus.datasource.driver have be
- Flyway migration location may not be null.
- The Hibernate ORM configuration in Quarkus does not support
- Datasource must be defined for persistence unit '%s'. Settin
- Unable to find file referenced in '<puPropertyKey(persistenc
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/e0c3dcae4952e445.
Report an issue: GitHub.