EntityManagerFactory auto configuration uses a deprecated setting (javax.persistence.sharedCache.mode). javax should be replaced by jakarta.
It results in a warning:
2022-11-30T10:15:34.789+01:00 WARN 50403 --- [ main] org.hibernate.orm.deprecation : HHH90000021: Encountered deprecated setting [javax.persistence.sharedCache.mode], use [jakarta.persistence.sharedCache.mode] instead
Steps to reproduce:
try(var ds = new HikariDataSource()) {
ds.setJdbcUrl("jdbc:h2:memory:abcd");
Class<MutablePersistenceUnitInfo> clazz= (Class<MutablePersistenceUnitInfo>) Class.forName("org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo");
Constructor<MutablePersistenceUnitInfo> ctor = clazz.getDeclaredConstructor();
ctor.setAccessible(true);
MutablePersistenceUnitInfo info = ctor.newInstance();
info.setPersistenceUnitName("...");
info.setNonJtaDataSource(ds);
var emf = provider.createContainerEntityManagerFactory(info, null);
emf.close();
}
Or just SpringApplication.run of course.
The warning does not show up if info is
new PersistenceUnitInfo() {
// implement methods
}
Comment From: wilkinsona
Thanks for the report but this has nothing to do with Spring Boot as the same problem occurs when calling Hibernate directly when the PersistenceUnitInfo returns a non-null value from getSharedCacheMode():
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
import com.zaxxer.hikari.HikariDataSource;
import jakarta.persistence.SharedCacheMode;
import jakarta.persistence.ValidationMode;
import jakarta.persistence.spi.ClassTransformer;
import jakarta.persistence.spi.PersistenceUnitInfo;
import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.hibernate.jpa.HibernatePersistenceProvider;
import org.junit.jupiter.api.Test;
public class SharedCacheModeWarning {
@Test
void test() {
try (var ds = new HikariDataSource()) {
ds.setJdbcUrl("jdbc:h2:mem:abcd");
var emf = new HibernatePersistenceProvider().createContainerEntityManagerFactory(new PersistenceUnitInfo() {
@Override
public String getPersistenceUnitName() {
return "test";
}
@Override
public String getPersistenceProviderClassName() {
return null;
}
@Override
public PersistenceUnitTransactionType getTransactionType() {
return null;
}
@Override
public DataSource getJtaDataSource() {
return null;
}
@Override
public DataSource getNonJtaDataSource() {
return ds;
}
@Override
public List<String> getMappingFileNames() {
return Collections.emptyList();
}
@Override
public List<URL> getJarFileUrls() {
return Collections.emptyList();
}
@Override
public URL getPersistenceUnitRootUrl() {
return null;
}
@Override
public List<String> getManagedClassNames() {
return Collections.emptyList();
}
@Override
public boolean excludeUnlistedClasses() {
return true;
}
@Override
public SharedCacheMode getSharedCacheMode() {
return SharedCacheMode.UNSPECIFIED;
}
@Override
public ValidationMode getValidationMode() {
return ValidationMode.NONE;
}
@Override
public Properties getProperties() {
return new Properties();
}
@Override
public String getPersistenceXMLSchemaVersion() {
return null;
}
@Override
public ClassLoader getClassLoader() {
return getClass().getClassLoader();
}
@Override
public void addTransformer(ClassTransformer transformer) {
}
@Override
public ClassLoader getNewTempClassLoader() {
return null;
}
}, null);
emf.close();
}
}
}
This has already been reported to the Hibernate team: https://hibernate.atlassian.net/browse/HHH-15768.