【发布时间】:2011-03-05 23:57:30
【问题描述】:
我正在寻找 OpenJPA 中的实体检测。我不需要在 persistence.xml 中声明所有实体。
编辑:对不起,我忘了说我开发了一个 java se 应用程序。
【问题讨论】:
标签: java jpa openjpa persistence.xml
我正在寻找 OpenJPA 中的实体检测。我不需要在 persistence.xml 中声明所有实体。
编辑:对不起,我忘了说我开发了一个 java se 应用程序。
【问题讨论】:
标签: java jpa openjpa persistence.xml
根据 JPA 规范,您必须明确列出 Java SE 环境中的所有类:
6.2.1.6 映射文件、jar文件、类、exclude-unlisted-classes
(...)
命名托管持久性列表 也可以指定类 JAR 文件的或附加的 和映射文件。任何映射 在这些上找到的元数据注释 类将被处理,或者他们 将使用映射进行映射 注释默认值。类元素 用于列出托管持久性 班级。 所有命名托管的列表 必须指定持久性类 在 Java SE 环境中确保 可移植性。 可移植的 Java SE 应用程序不应依赖于 此处描述的其他机制 指定托管持久性 持久性单元的类。 持久性提供者可能还需要 实体类的集合和 要管理的类必须是 完全列举在每一个
persistence.xmlJava SE 中的文件 环境。根目录中包含的所有类 持久性单元也被搜索 用于带注释的托管持久性 类和任何映射元数据 在它们上找到的注释将是 处理,否则它们将被映射 使用映射注释默认值。 如果不是故意的 带注释的持久性类 包含在根 持久性单元包含在 持久性单元
exclude-unlisted-classes元素 应该使用。这exclude-unlisted-classes元素是 不适用于 Java SE 环境。
现在,如果您不介意不可移植,您可以使用提供程序扩展,但我在 OpenJPA 中找不到类似于 Hibernate 的 hibernate.archive.autodetection 属性的东西。
使用 Spring 的 JPA integration(允许更灵活的类路径扫描)是另一种选择。
【讨论】:
exclude-unlisted-classes 设置为false)。
阅读用户手册中的Persistent Class List 部分。
与许多 ORM 产品不同,OpenJPA 可以 不需要知道你的所有 启动时的持久类。 OpenJPA 发现新的持久类 当它们被加载到 虚拟机;事实上你可以引入新的 持久类运行 OpenJPA 下的应用程序。
【讨论】:
还有一个 JPA 插件可以为你做这件事。最新版本在 Maven Central 中不可用,因此您必须自己克隆和构建。
【讨论】: