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.