【问题标题】:Hibernate java 10休眠Java 10
【发布时间】:2018-12-21 21:40:46
【问题描述】:

我将我的应用程序从 java 8 迁移到 java 10。 但是现在我在尝试将某些内容存储在数据库中时看到以下异常

Caused by: javax.persistence.RollbackException: Error while committing the transaction
    at org.hibernate.internal.ExceptionConverterImpl.convertCommitException(ExceptionConverterImpl.java:77) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517) ~[spring-orm-4.3.18.RELEASE.jar:4.3.18.RELEASE]
... 91 more
Caused by: org.hibernate.AssertionFailure: Exception releasing cache locks
    at org.hibernate.engine.spi.ActionQueue$AfterTransactionCompletionProcessQueue.afterTransactionCompletion(ActionQueue.java:990) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.hibernate.engine.spi.ActionQueue.afterTransactionCompletion(ActionQueue.java:513) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.hibernate.internal.SessionImpl.afterTransactionCompletion(SessionImpl.java:2501) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.afterTransactionCompletion(JdbcCoordinatorImpl.java:479) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.afterCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:198) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$400(JdbcResourceLocalTransactionCoordinatorImpl.java:39) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:273) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:98) ~[hibernate-core-5.3.2.Final.jar:5.3.2.Final]
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517) ~[spring-orm-4.3.18.RELEASE.jar:4.3.18.RELEASE]
... 91 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private jdk.internal.reflect.ConstructorAccessorImpl jdk.internal.reflect.DelegatingConstructorAccessorImpl.delegate accessible: module java.base does not "opens jdk.internal.reflect" to unnamed module @55283c54
    at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:337) ~[?:?]
    at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:281) ~[?:?]
    at java.lang.reflect.Field.checkCanSetAccessible(Field.java:176) ~[?:?]
    at java.lang.reflect.Field.setAccessible(Field.java:170) ~[?:?]

我使用以下依赖项

<spring.version>4.3.18.RELEASE</spring.version>
<spring-boot.version>1.5.14.RELEASE</spring-boot.version>
<hibernate-core.version>5.3.2.Final</hibernate-core.version>
<java.version>1.10</java.version>

【问题讨论】:

  • 尝试将 --add-opens java.base/jdk.internal.reflect=ALL-UNNAMED 添加到您的 JVM 参数中。
  • @RobertHume 我会试试的
  • @RobertHume 这对我有帮助,但我遇到了其他问题原因:java.lang.reflect.InaccessibleObjectException: Unable to make field final jdk.internal.loader.URLClassPath jdk.internal.loader.ClassLoaders$ AppClassLoader.ucp 可访问:模块 java.base 不会“打开 jdk.internal.loader”到未命名的模块你怎么看?
  • @ИванГладуш 您需要为所有此类模块复制 --add-opens java.base/jdk.internal.reflect=ALL-UNNAMED(将 jdk.internal.reflect 替换为适用的模块)
  • @Ivan TY 你让我开心

标签: java spring hibernate spring-boot jpa


【解决方案1】:

这是根本原因

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private jdk.internal.reflect.ConstructorAccessorImpl jdk.internal.reflect.DelegatingConstructorAccessorImpl.delegate accessible: module java.base does not "opens jdk.internal.reflect" to unnamed module @55283c54

Java 10 有模块的概念,首先public 不再“那么”公开,反射也没有那么强大。

您可以按照@RobertHume 的建议使用 JVM 标志,但实际上您需要迁移到支持 Java9/10(如果有的话)的更新的 Hibernate 版本。

还可以查看此链接 https://www.sitepoint.com/reflection-vs-encapsulation-in-the-java-module-system/#commandlineescapehatches 以获取有关建议的 JVM 标志的更多详细信息

【讨论】:

  • @ИванГладуш,如果你也把它带到 Hibernate 开发者那里会很好。我敢打赌他们很想知道这种情况会发生。
猜你喜欢
  • 1970-01-01
  • 2011-09-18
  • 2010-11-25
  • 2011-02-25
  • 2018-09-10
  • 2013-07-01
  • 2012-12-24
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多