|
1 | 1 | package liquibase.ext.hibernate.database;
|
2 | 2 |
|
3 | 3 | import java.io.IOException;
|
| 4 | +import java.util.ArrayList; |
4 | 5 | import java.util.HashMap;
|
5 | 6 | import java.util.Map;
|
| 7 | +import java.util.List; |
6 | 8 |
|
| 9 | +import org.hibernate.bytecode.enhance.spi.EnhancementContext; |
7 | 10 | import org.hibernate.cfg.AvailableSettings;
|
8 | 11 | import org.hibernate.envers.configuration.EnversSettings;
|
9 | 12 | import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
|
| 13 | +import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor; |
10 | 14 | import org.hibernate.jpa.boot.spi.Bootstrap;
|
11 | 15 | import org.springframework.core.io.ClassPathResource;
|
12 | 16 | import org.springframework.core.io.DefaultResourceLoader;
|
13 | 17 | import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager;
|
14 | 18 | import org.springframework.orm.jpa.persistenceunit.SmartPersistenceUnitInfo;
|
15 | 19 | import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
|
16 |
| - |
| 20 | +import org.springframework.core.NativeDetector; |
17 | 21 | import jakarta.persistence.spi.PersistenceUnitInfo;
|
18 | 22 | import liquibase.Scope;
|
19 | 23 | import liquibase.database.DatabaseConnection;
|
@@ -101,12 +105,35 @@ protected EntityManagerFactoryBuilderImpl createEntityManagerFactoryBuilder() {
|
101 | 105 | map.put(EnversSettings.REVISION_FIELD_NAME,getHibernateConnection().getProperties().getProperty(EnversSettings.REVISION_FIELD_NAME,"REV"));
|
102 | 106 | map.put(EnversSettings.REVISION_TYPE_FIELD_NAME,getHibernateConnection().getProperties().getProperty(EnversSettings.REVISION_TYPE_FIELD_NAME,"REVTYPE"));
|
103 | 107 | map.put(AvailableSettings.USE_NATIONALIZED_CHARACTER_DATA, getProperty(AvailableSettings.USE_NATIONALIZED_CHARACTER_DATA));
|
104 |
| - |
105 |
| - EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(persistenceUnitInfo, map); |
| 108 | + PersistenceUnitInfoDescriptor persistenceUnitInfoDescriptor = createPersistenceUnitInfoDescriptor(persistenceUnitInfo); |
| 109 | + EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(persistenceUnitInfoDescriptor, map); |
106 | 110 |
|
107 | 111 | return builder;
|
108 | 112 | }
|
109 | 113 |
|
| 114 | + |
| 115 | + public PersistenceUnitInfoDescriptor createPersistenceUnitInfoDescriptor(PersistenceUnitInfo info) { |
| 116 | + final List<String> mergedClassesAndPackages = new ArrayList<>(info.getManagedClassNames()); |
| 117 | + if (info instanceof SmartPersistenceUnitInfo ) { |
| 118 | + mergedClassesAndPackages.addAll(((SmartPersistenceUnitInfo)info).getManagedPackages()); |
| 119 | + } |
| 120 | + return |
| 121 | + new PersistenceUnitInfoDescriptor(info) { |
| 122 | + @Override |
| 123 | + public List<String> getManagedClassNames() { |
| 124 | + return mergedClassesAndPackages; |
| 125 | + } |
| 126 | + |
| 127 | + @Override |
| 128 | + public void pushClassTransformer(EnhancementContext enhancementContext) { |
| 129 | + if (!NativeDetector.inNativeImage()) { |
| 130 | + super.pushClassTransformer(enhancementContext); |
| 131 | + } |
| 132 | + } |
| 133 | + }; |
| 134 | + } |
| 135 | + |
| 136 | + |
110 | 137 | @Override
|
111 | 138 | public String getShortName() {
|
112 | 139 | return "hibernateSpringPackage";
|
|
0 commit comments