Skip to content

Commit

Permalink
HBX-2899: Update Hibernate ORM Dependency to Version 7.0.0.Beta1
Browse files Browse the repository at this point in the history
Signed-off-by: Koen Aers <[email protected]>
  • Loading branch information
koentsje committed Aug 7, 2024
1 parent afc9cc1 commit 52e929a
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ public boolean isDiscriminatorValueNull() {

@Override
public boolean isExplicitPolymorphism() {
return persistentClass.isExplicitPolymorphism();
return false;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -935,13 +935,7 @@ public void testIsExplicitPolymorphism() {
assertFalse(rootClassWrapper.isExplicitPolymorphism());
assertFalse(singleTableSubclassWrapper.isExplicitPolymorphism());
assertFalse(joinedSubclassWrapper.isExplicitPolymorphism());
((RootClass)rootClassTarget).setExplicitPolymorphism(true);
assertTrue(rootClassWrapper.isExplicitPolymorphism());
assertTrue(singleTableSubclassWrapper.isExplicitPolymorphism());
assertTrue(joinedSubclassWrapper.isExplicitPolymorphism());
assertFalse(specialRootClassWrapper.isExplicitPolymorphism());
((RootClass)specialRootClassTarget).setExplicitPolymorphism(true);
assertTrue(specialRootClassWrapper.isExplicitPolymorphism());
}

@Test
Expand Down
63 changes: 57 additions & 6 deletions maven/src/main/java/org/hibernate/tool/maven/TransformHbmMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.jaxb.Origin;
import org.hibernate.boot.jaxb.SourceType;
import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping;
Expand All @@ -21,6 +22,11 @@
import org.hibernate.boot.jaxb.internal.MappingBinder;
import org.hibernate.boot.jaxb.mapping.spi.JaxbEntityMappingsImpl;
import org.hibernate.boot.jaxb.spi.Binding;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.cfg.JdbcSettings;
import org.hibernate.dialect.H2Dialect;
import org.hibernate.service.ServiceRegistry;

import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
Expand All @@ -36,13 +42,41 @@ public void execute() throws MojoExecutionException, MojoFailureException {
MappingBinder mappingBinder = new MappingBinder(
MappingBinder.class.getClassLoader()::getResourceAsStream,
UnsupportedFeatureHandling.ERROR);
Marshaller marshaller = createMarshaller(mappingBinder);
List<File> hbmFiles = getHbmFiles(inputFolder);
List<Binding<JaxbHbmHibernateMapping>> hbmMappings = getHbmMappings(hbmFiles, mappingBinder);
List<Binding<JaxbEntityMappingsImpl>> transformed =
HbmXmlTransformer.transform(hbmMappings, UnsupportedFeatureHandling.ERROR);
for (int i = 0; i < hbmFiles.size(); i++) {
marshall(marshaller, transformed.get(i).getRoot(), hbmFiles.get(i));
performTransformation(hbmMappings, mappingBinder, createServiceRegistry());
}

private ServiceRegistry createServiceRegistry() {
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder();
ssrb.clearSettings();
ssrb.applySetting(JdbcSettings.ALLOW_METADATA_ON_BOOT, false);
// Choose the H2 dialect by default, make this configurable
ssrb.applySetting(JdbcSettings.DIALECT, H2Dialect.class.getName());
return ssrb.build();
}

private void performTransformation(
List<Binding<JaxbHbmHibernateMapping>> hbmBindings,
MappingBinder mappingBinder,
ServiceRegistry serviceRegistry) {
Marshaller marshaller = createMarshaller(mappingBinder);
MetadataSources metadataSources = new MetadataSources( serviceRegistry );
hbmBindings.forEach( metadataSources::addHbmXmlBinding );
List<Binding<JaxbEntityMappingsImpl>> transformedBindings = HbmXmlTransformer.transform(
hbmBindings,
(MetadataImplementor) metadataSources.buildMetadata(),
serviceRegistry,
UnsupportedFeatureHandling.ERROR
);
for (int i = 0; i < hbmBindings.size(); i++) {
Binding<JaxbHbmHibernateMapping> hbmBinding = hbmBindings.get( i );
Binding<JaxbEntityMappingsImpl> transformedBinding = transformedBindings.get( i );

HbmXmlOrigin origin = (HbmXmlOrigin)hbmBinding.getOrigin();
File hbmXmlFile = origin.getHbmXmlFile();

marshall(marshaller, transformedBinding.getRoot(), hbmXmlFile);
}
}

Expand All @@ -51,7 +85,7 @@ private List<Binding<JaxbHbmHibernateMapping>> getHbmMappings(List<File> hbmXmlF
hbmXmlFiles.forEach((hbmXmlFile) -> {
final String fullPath = hbmXmlFile.getAbsolutePath();
getLog().info("Adding file: '" + fullPath + "' to the list to be transformed.");
Origin origin = new Origin(SourceType.FILE, hbmXmlFile.getAbsolutePath());
Origin origin = new HbmXmlOrigin(hbmXmlFile);
Binding<JaxbHbmHibernateMapping> binding = bindMapping( mappingBinder, hbmXmlFile, origin );
result.add(binding);
});
Expand Down Expand Up @@ -107,4 +141,21 @@ private List<File> getHbmFiles(File f) {
return result;
}

private class HbmXmlOrigin extends Origin {

private static final long serialVersionUID = 1L;

private final File hbmXmlFile;

public HbmXmlOrigin(File hbmXmlFile) {
super( SourceType.FILE, hbmXmlFile.getAbsolutePath() );
this.hbmXmlFile = hbmXmlFile;
}

public File getHbmXmlFile() {
return hbmXmlFile;
}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -509,7 +509,7 @@ else if ( "delete-orphan".equals( element ) ) {
}
else if ( "save-update".equals( element ) ) {
if (cascadeType == null) cascadeType = importType( "org.hibernate.annotations.CascadeType");
cascade.append( cascadeType ).append(".SAVE_UPDATE").append(", ");
cascade.append( cascadeType ).append(".MERGE").append(", ");
}
else if ( "replicate".equals( element ) ) {
if (cascadeType == null) cascadeType = importType( "org.hibernate.annotations.CascadeType");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.hibernate.boot.spi.MetadataBuildingContext;
import org.hibernate.mapping.Collection;
import org.hibernate.mapping.DependantValue;
import org.hibernate.mapping.IndexedCollection;
import org.hibernate.mapping.OneToMany;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Value;
Expand Down Expand Up @@ -46,7 +47,8 @@ public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws
oldKeyForeignKeyName = keyDependantValue.getForeignKeyName();
keyDependantValue.setForeignKeyName("none");
}
super.doSecondPass(persistentClasses);
secondPass(persistentClasses);
// super.doSecondPass(persistentClasses);
if(elementDependantValue!=null) {
elementDependantValue.setForeignKeyName(oldElementForeignKeyName);
}
Expand Down
12 changes: 6 additions & 6 deletions orm/src/main/resources/dao/daohome.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public class ${declarationName}Home {
public void attachDirty(${declarationName} instance) {
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "attaching dirty ${declarationName} instance");
try {
sessionFactory.getCurrentSession().saveOrUpdate(instance);
sessionFactory.getCurrentSession().merge(instance);
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "attach successful");
}
catch (RuntimeException re) {
Expand All @@ -117,14 +117,14 @@ public class ${declarationName}Home {
}
}

public void delete(${declarationName} persistentInstance) {
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "deleting ${declarationName} instance");
public void remove(${declarationName} persistentInstance) {
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "removing ${declarationName} instance");
try {
sessionFactory.getCurrentSession().delete(persistentInstance);
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "delete successful");
sessionFactory.getCurrentSession().remove(persistentInstance);
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "remove successful");
}
catch (RuntimeException re) {
logger.log(${pojo.importType("java.util.logging.Level")}.SEVERE, "delete failed", re);
logger.log(${pojo.importType("java.util.logging.Level")}.SEVERE, "remove failed", re);
throw re;
}
}
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
<google-java-format.version>1.19.1</google-java-format.version>
<h2.version>2.2.224</h2.version>
<hibernate-commons-annotations.version>6.0.6.Final</hibernate-commons-annotations.version>
<hibernate-orm.version>7.0.0.Alpha3</hibernate-orm.version>
<hibernate-orm.version>7.0.0.Beta1</hibernate-orm.version>
<hsqldb.version>2.6.1</hsqldb.version>
<javaee-api.version>8.0.1</javaee-api.version>
<jboss-logging.version>3.5.3.Final</jboss-logging.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public class ${declarationName}Home {
public void attachDirty(${declarationName} instance) {
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "attaching dirty ${declarationName} instance");
try {
sessionFactory.getCurrentSession().saveOrUpdate(instance);
sessionFactory.getCurrentSession().merge(instance);
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "attach successful");
}
catch (RuntimeException re) {
Expand All @@ -117,14 +117,14 @@ public class ${declarationName}Home {
}
}

public void delete(${declarationName} persistentInstance) {
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "deleting ${declarationName} instance");
public void remove(${declarationName} persistentInstance) {
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "removing ${declarationName} instance");
try {
sessionFactory.getCurrentSession().delete(persistentInstance);
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "delete successful");
sessionFactory.getCurrentSession().remove(persistentInstance);
logger.log(${pojo.importType("java.util.logging.Level")}.INFO, "remove successful");
}
catch (RuntimeException re) {
logger.log(${pojo.importType("java.util.logging.Level")}.SEVERE, "delete failed", re);
logger.log(${pojo.importType("java.util.logging.Level")}.SEVERE, "remove failed", re);
throw re;
}
}
Expand Down

0 comments on commit 52e929a

Please sign in to comment.