Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用openJPA自动检测实体?_Java_Jpa_Openjpa_Persistence.xml - Fatal编程技术网

Java 如何使用openJPA自动检测实体?

Java 如何使用openJPA自动检测实体?,java,jpa,openjpa,persistence.xml,Java,Jpa,Openjpa,Persistence.xml,我正在寻找OpenJPA中的实体检测。我不需要声明persistence.xml中的所有实体 编辑:对不起,我忘了说我开发了一个JavaSE应用程序 根据JPA规范,必须明确列出Java SE环境中的所有类: 6.2.1.6映射文件、jar文件、类、排除未列出的类 命名的托管持久性的列表 也可以指定类 JAR文件的,或附加于JAR文件的 和映射文件。任何映射 在这些上找到元数据批注 类将被处理,或者 将使用映射 注释默认值。类元素 用于列出托管持久性 班所有已命名的托管服务器的列表 必须指定持

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


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

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

6.2.1.6映射文件、jar文件、类、排除未列出的类

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

的根目录中包含的所有类 还将搜索持久性单元 用于带注释的托管持久性 类和任何映射元数据 在它们上找到的注释将被删除 已处理,否则将映射它们 使用映射注释默认值。 如果不打算 带注释的持久性类 包含在 持久化单元必须包含在 持久化单元 排除未列出的类元素 应该使用。这个 排除未列出的类元素是 不适用于Java SE 环境

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

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

阅读用户手册中的部分

与许多ORM产品不同,OpenJPA是这样做的 不需要知道你所有的 启动时的持久类。OpenJPA 发现新的持久类 在加载到中时自动执行 JVM;事实上,你可以介绍新的 持久化类进入运行状态 OpenJPA下的应用程序

注意:用户手册中记录了一些限制,但为了保持本文的简短,我省略了这些限制。
还有一个JPA插件可以帮你做到这一点。最新版本在Maven Central中不可用,因此您必须克隆并自行构建


它不适用于JavaSE持久化单元。很抱歉,我忘了说我开发了一个JavaSE应用程序。然后按照上一段中的建议使用spring。在se as工作well@seanizerOP的评论在我的更新之前,我最初的建议是将exclude unlisted class设置为false。