From cd329fec0532f9c61b357ad5bdf331662d3e4fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Thu, 16 Jan 2025 09:01:12 +0100 Subject: [PATCH] Align bytecode enhancement behavior on Quarkus in QuarkusLikeORMUnitTestCase --- .../bugs/QuarkusLikeEnhancementContext.java | 26 +++++++++++++++++++ .../bugs/QuarkusLikeORMUnitTestCase.java | 2 ++ 2 files changed, 28 insertions(+) create mode 100644 orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/QuarkusLikeEnhancementContext.java diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/QuarkusLikeEnhancementContext.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/QuarkusLikeEnhancementContext.java new file mode 100644 index 00000000..9d9e2d6e --- /dev/null +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/QuarkusLikeEnhancementContext.java @@ -0,0 +1,26 @@ +package org.hibernate.bugs; + +import org.hibernate.bytecode.enhance.spi.DefaultEnhancementContext; +import org.hibernate.bytecode.enhance.spi.UnloadedField; +import org.hibernate.bytecode.enhance.spi.UnsupportedEnhancementStrategy; + +public class QuarkusLikeEnhancementContext extends DefaultEnhancementContext { + @Override + public boolean doBiDirectionalAssociationManagement(final UnloadedField field) { + //Don't enable automatic association management as it's often too surprising. + //Also, there's several cases in which its semantics are of unspecified, + //such as what should happen when dealing with ordered collections. + return false; + } + + @Override + public UnsupportedEnhancementStrategy getUnsupportedEnhancementStrategy() { + // We expect model classes to be enhanced. + // Lack of enhancement could lead to many problems, + // from bad performance, to Quarkus-specific optimizations causing errors/data loss, + // to incorrect generated bytecode (references to non-existing methods). + // If something prevents enhancement, it's just safer to have Hibernate ORM's enhancer fail + // with a clear error message pointing to the application class that needs to be fixed. + return UnsupportedEnhancementStrategy.FAIL; + } +} diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/QuarkusLikeORMUnitTestCase.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/QuarkusLikeORMUnitTestCase.java index f96bffd4..b0f5fdd1 100644 --- a/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/QuarkusLikeORMUnitTestCase.java +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/QuarkusLikeORMUnitTestCase.java @@ -17,6 +17,7 @@ import org.hibernate.cfg.AvailableSettings; +import org.hibernate.testing.bytecode.enhancement.CustomEnhancementContext; import org.hibernate.testing.bytecode.enhancement.extension.BytecodeEnhanced; import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.ServiceRegistry; @@ -61,6 +62,7 @@ ) @SessionFactory @BytecodeEnhanced +@CustomEnhancementContext(QuarkusLikeEnhancementContext.class) class QuarkusLikeORMUnitTestCase { // Add your tests, using standard JUnit.