代码之家  ›  专栏  ›  技术社区  ›  Steven

在persistence.xml之外定义JPA实体类

  •  3
  • Steven  · 技术社区  · 15 年前

    是否有方法在persistence.xml之外定义JPA实体类(即在单独的文件中)?

    不能将persistence.xml作为外部文件也就足够了。

    事先谢谢, 史蒂文

    编辑: 对不起,我不清楚。这是在Java SE环境中进行的。 另外,我不想在persistence.xml文件中列出某些.class.aclass。 这是因为我想动态地创建这个类列表并引用一个包含这个列表的文件。

    编辑2: 通过在构建时在打包persistence.xml文件之前写入该文件来解决此问题。如果有人感兴趣,我使用scannotations发现所有用@entity注释的类,并将它们写到target/classes/meta-inf中的persistence.xml文件中(使用maven)。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Pascal Thivent    15 年前

    在Java SE环境中,便携应用程序 必须 在中显式列出类 persistence.xml . 根据JPA 1.0规范:

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

    下列类必须是 含蓄地或明确地表示为 要管理的持久性类 包含在持久性单元中: 实体类;可嵌入类; 映射的超类。

    托管持久性类集 由持久性单元管理的 通过使用一个或多个 以下内容:

    • 一个或多个对象/关系映射XML文件
    • 将搜索类的一个或多个JAR文件
    • 类的显式列表
    • 包含在 持久性单位(除非 exclude-unlisted-classes 元素是 指定)

    (…)

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

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

    管理的实体的结果集 由坚持的单位是联合 在这些源中,通过映射 元数据注释(或注释) 对于任何给定的类 被XML映射重写 信息文件(如果两者都有) 注释和XML映射 为了那个班。最小便携式 覆盖级别为 持久字段或属性。

    如果不关心移植性,一些提供者确实支持Java SE环境中的实体发现(例如,EclipseLink, Hibernate )。

    如果需要考虑可移植性,那么使用第三方容器(如Spring)会有所帮助。

        2
  •  0
  •   Jim Tough    15 年前

    如果您愿意并且能够将实体类与persistence.xml文件一起打包到JAR文件中,那么您不需要在 <class> 元素。当在META-INF目录中使用persistence.xml文件部署JAR时,将在运行时搜索JAR中具有 @Entity 注释。