【问题标题】:How to detect entities automatically with openJPA?如何使用 openJPA 自动检测实体?
【发布时间】:2011-03-05 23:57:30
【问题描述】:

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

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

【问题讨论】:

    标签: java jpa openjpa persistence.xml


    【解决方案1】:

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

    6.2.1.6 映射文件、jar文件、类、exclude-unlisted-classes

    (...)

    命名托管持久性列表 也可以指定类 JAR 文件的或附加的 和映射文件。任何映射 在这些上找到的元数据注释 类将被处理,或者他们 将使用映射进行映射 注释默认值。类元素 用于列出托管持久性 班级。 所有命名托管的列表 必须指定持久性类 在 Java SE 环境中确保 可移植性。 可移植的 Java SE 应用程序不应依赖于 此处描述的其他机制 指定托管持久性 持久性单元的类。 持久性提供者可能还需要 实体类的集合和 要管理的类必须是 完全列举在每一个 persistence.xml Java SE 中的文件 环境。

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

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

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

    【讨论】:

    • 它不适用于 Java SE 持久性单元。不好意思,忘了说我是开发java se app的。
    • 然后按照上一段中的建议使用弹簧。在 SE 中也可以使用
    • @seanizer OP 的评论先于我的更新和问题的更新(我最初的建议是将exclude-unlisted-classes 设置为false)。
    【解决方案2】:

    阅读用户手册中的Persistent Class List 部分。

    与许多 ORM 产品不同,OpenJPA 可以 不需要知道你的所有 启动时的持久类。 OpenJPA 发现新的持久类 当它们被加载到 虚拟机;事实上你可以引入新的 持久类运行 OpenJPA 下的应用程序。

    • 注意:用户手册中记录了一些限制,但为了保持这篇文章的简短,我省略了这些限制。

    【讨论】:

      【解决方案3】:

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

      JPA-Plugin

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        • 2012-01-21
        • 1970-01-01
        • 2021-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多