使用JDK 11与Hibernate ORM

   |       Hibernate ORM

JDK 11即将到来,您可能想开始使用它测试应用程序。

您的应用程序使用Hibernate技术?这不应该是个问题,但这里有一些重要信息。

Hibernate技术与JDK 11支持

我们很早就开始测试Hibernate技术与JDK 11,所以有一些好消息:Hibernate ORM (5.3.3+)、Hibernate Search (5.10.4+) 和 Hibernate Validator (6.0.12+) 可以与JDK 11一起使用。

注意,目前,尽管我们定义了自动模块名称,但作为Jigsaw模块运行尚未完全测试,并且预期不会正常工作。

不过ORM还有一些小问题

虽然Hibernate ORM 5.3支持(并且与JDK 11进行了测试),但在等待Hibernate ORM 5.4的过程中,您需要调整一些东西。

JAXB依赖

JAXB不再由JDK提供,因此您需要一个外部依赖项来使用它

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.0.1</version>
</dependency>

这些依赖项将在Hibernate ORM 5.4中添加。

ByteBuddy实验性支持

当使用ORM与JDK 11一起使用时,您可能会遇到来自ByteBuddy的以下异常

Caused by: org.hibernate.bytecode.enhance.spi.EnhancementException: Failed to enhance class org.hibernate.jpa.test.enhancement.TestLazyPropertyOnPreUpdate
        at org.hibernate.bytecode.enhance.internal.bytebuddy.EnhancerImpl.enhance(EnhancerImpl.java:117)
        at org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner$2.loadClass(BytecodeEnhancerRunner.java:94)
        ... 40 more
Caused by: java.lang.UnsupportedOperationException
        at net.bytebuddy.jar.asm.ClassVisitor.visitNestMemberExperimental(ClassVisitor.java:248)
        at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:651)
        at net.bytebuddy.jar.asm.ClassReader.accept(ClassReader.java:391)
        at net.bytebuddy.pool.TypePool$Default.parse(TypePool.java:1051)

这是由于ASM(ByteBuddy用于操作字节码的组件)仅作为实验性功能支持一些JDK 11功能。ByteBuddy也是如此,您需要一个特定的标志来启用对这些功能的支持。

为了使一切正常,您需要在您的JVM中添加以下标志:-Dnet.bytebuddy.experimental=true

希望ASM 7很快就会发布。

反馈、问题、想法?

要取得联系,请使用常规渠道


回到顶部