2

我正在寻找 OpenJPA 中的实体检测。我不需要在persistence.xml 中声明所有实体。

编辑:对不起,我忘了说我开发了一个 java se 应用程序。

4

3 回答 3

4

阅读用户手册中的持久类列表部分。

与许多 ORM 产品不同,OpenJPA 不需要在启动时了解所有持久类。OpenJPA 在新的持久类加载到 JVM 时自动发现它们;事实上,您可以在 OpenJPA 下将新的持久类引入正在运行的应用程序中。

  • 注意:用户手册中记录了一些限制,但为了保持这篇文章的简短,我省略了这些限制。
于 2010-06-21T15:55:26.723 回答
3

根据 JPA 规范,您必须明确列出 Java SE 环境中的所有类:

6.2.1.6 mapping-file、jar-file、class、exclude-unlisted-classes

(...)

除了 JAR 文件和映射文件之外,还可以指定命名的托管持久性类列表。在这些类上找到的任何映射元数据注释都将被处理,或者将使用映射注释默认值进行映射。class 元素用于列出托管的持久性类。必须在 Java SE 环境中指定所有命名的托管持久性类的列表以确保可移植性。可移植 Java SE 应用程序不应依赖此处描述的其他机制来指定持久性单元的托管持久性类。持久性提供者还可能要求实体类集和要管理的类必须在每个 persistence.xmlJava SE 环境中的文件。

包含在持久性单元根目录中的所有类也会搜索带注释的托管持久性类,并且将处理在它们上找到的任何映射元数据注释,或者将使用映射注释默认值映射它们。如果不打算将包含在持久性单元根中的带注释的持久性类包含在持久性单元中, exclude-unlisted-classes则应使用该元素。该 exclude-unlisted-classes元素不适用于 Java SE 环境。

hibernate.archive.autodetection现在,如果您不介意不可移植,您可以使用提供程序扩展,但我在 OpenJPA 中找不到与 Hibernate 的属性类似的东西。

使用 Spring 的JPA 集成(允许更灵活的类路径扫描)是另一种选择。

于 2010-06-20T13:52:56.217 回答
0

还有一个 JPA 插件可以为你做这件事。最新版本在 Maven Central 中不可用,因此您必须自己克隆和构建。

JPA 插件

于 2017-11-19T13:05:28.280 回答