EJB3上是否仍然可以使用包级别注释来映射JPA / Hibernate上的实体?

时间:2010-02-12 21:19:26

标签: hibernate jpa annotations package

问题:

我有两个补充项目,一个是基础项目(基础项目),一个是共享实体,一个是特定项目(特定项目),需要从第一个项目中查询实体。

它们都访问相同的数据库,但是使用不同的方案和不同的用户/授权。尽管如此,两者在共享表上至少都有“SELECT”授权。

我发现有三种可能性将它们集成到Specific Project的persistence.xml中:

  1. 使用< class>列出基础项目中的每个实体Specific Projetc的persistence.xml中的标签。缺点:每当新实体出现时,必须将其添加到特定项目中才能看到

  2. 使用< jar-file>添加Base Project'.jar'文件特定项目的persistence.xml中的标记。缺点:它必须是jar文件的真实路径,可能会改变;

  3. (BEST到目前为止)使用< class>在persistence.xml中添加Base Project的实体PACKAGE。标记,如Hibernate entityManager's setup documentation中所述。缺点:必须通过package-info.java文件使用包级别注释,我无法在任何地方找到它。

  4. 问题:

    有谁知道是否真的可以使用包级别注释来表示persistence.xml中的实体包?

    Hibernate文档指出它可以完成,但没有说明如何:

      

         

    class元素指定一个   您完全合格的班级名称   将映射。默认情况下都正常   带注释的类和所有hbm.xml   存档中找到的文件是   添加到持久性单元   组态。你可以添加一些   外部实体通过课堂   虽然元素。作为一个延伸   规范,你可以添加一个包   元素中的名称(例如   org.hibernate.eg)。   小心,包将包括   在包级别定义的元数据   (即在package-info.java中),它不会   包括给定的所有类   封装

1 个答案:

答案 0 :(得分:0)

正如bug report所述,它运作正常。如果您想要package-info.java的示例,可以查看this hibernate forum post

注意:此功能不是persistence XML schema中所述的规范的一部分。

      <xsd:element name="class" type="xsd:string" 
                   minOccurs="0" maxOccurs="unbounded">
        <xsd:annotation>
          <xsd:documentation>

            Class to scan for annotations.  It should be annotated 
            with either @Entity, @Embeddable or @MappedSuperclass.

          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>