【问题标题】:generating ORM with hibernate in Java 9 application在 Java 9 应用程序中使用休眠生成 ORM
【发布时间】:2017-12-28 12:07:14
【问题描述】:

我正在尝试使用休眠生成 ORM 我正在使用 oracle 11g 数据库 在进行休眠代码生成配置后出现此错误

java.lang.reflect.InaccessibleObjectException: Unable to make field java.util.ArrayList jdk.internal.loader.URLClassPath.loaders accessible: module java.base does not "opens jdk.internal.loader" to unnamed module @6a75c1c8
Unable to make field java.util.ArrayList jdk.internal.loader.URLClassPath.loaders accessible: module java.base does not "opens jdk.internal.loader" to unnamed module @6a75c1c8
java.lang.reflect.InaccessibleObjectException: Unable to make field java.util.ArrayList jdk.internal.loader.URLClassPath.loaders accessible: module java.base does not "opens jdk.internal.loader" to unnamed module @6a75c1c8
Unable to make field java.util.ArrayList jdk.internal.loader.URLClassPath.loaders accessible: module java.base does not "opens jdk.internal.loader" to unnamed module @6a75c1c8

这是我的 Hibernate.cfg.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.password">compte</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="hibernate.connection.username">compte</property>
        <property name="hibernate.default_schema">COMPTE</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
    </session-factory>
</hibernate-configuration>

【问题讨论】:

  • 您能否用您正在使用的休眠版本(兼容性检查)和导致上述错误的完整堆栈跟踪/步骤更新问题?
  • 当我尝试使用 jdk 1.7 时出现此错误:org.hibernate.console.HibernateConsoleRuntimeException: 无法计算类路径 无法计算类路径

标签: java hibernate java-9


【解决方案1】:

如果您的类路径中有一个类型试图访问 jdk.internal.loader.URLClassPath,该类型在 JDK 中用作内部类并专门导出到 java.desktopjava.instrumentjava.logging,则该异常似乎是合理的仅限。

更多关于the unnamed module :-

未命名的模块读取所有其他模块。加载任何类型的代码 因此,来自类路径的能够访问导出的类型 所有其他可读模块,默认情况下将包括所有 命名内置平台模块

访问包(类所在的包)的替代方法是使用 VM args ::

--add-opens java.base/jdk.internal.loader=ALL-UNNAMED

这将通过在java.base 模块中向所有未命名的模块打开包jdk.internal.loader 来增加可读性优势。

但理想情况下,应该提出/达成一种解决方案,避免打开内部包来访问此类,当您查看此错误的来源时会更清楚。

【讨论】:

  • 这个我看不懂
  • @RiadhAzzouz URLClassPath 是一个 JDK 内部类,未公开以供在答案中列出的 JDK 模块和包之外访问。因此,为了需要它,您可能希望将模块打开到类路径上的未命名模块。或者,根据您使用的功能,寻找替代方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2023-04-04
  • 1970-01-01
  • 2022-11-03
  • 2018-03-12
相关资源
最近更新 更多