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

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

有帮助吗?

解决方案

阅读 持续的班级列表 用户手册中的部分。

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

  • 注意:用户手册中有几个限制,但我遗漏了这些帖子以使这篇文章简要介绍。

其他提示

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

6.2.1.6映射文件,罐子文件,班级,排除级别的级别

(...)

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

还搜索了持久单元根中包含的所有类,以获取注释的托管持久性类,并且将处理上面的任何映射元数据注释,否则将使用映射注释默认值进行映射。如果不打算在持续单位的根部包含的注释持久性类中包括在持久性单元中,则 exclude-unlisted-classes 应使用元素。这 exclude-unlisted-classes 元素不打算在Java SE环境中使用。

现在,如果您不介意不携带,您可能会使用提供商扩展名,但是我找不到与Hibernate类似的东西 hibernate.archive.autodetection openjpa中的属性。

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

还有JPA-Plugin可以为您做到这一点。最新版本在Maven Central中不可用,因此您必须克隆并构建自己。

JPA-Plugin

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top