使用泛型的Hibernate映射

时间:2014-10-05 07:56:09

标签: java hibernate generics hibernate-mapping

我有这个班级

public class FolderOwner<T> { private T owner; }

在逻辑上,T可以是User

public class User {
   private String id;
   private String lastName, firstName, middleName;
}

Department

public class Department {
   private long id;
   private String name;
}

现在,我的这个类的实例属性为FolderOwner

public class Folder {
   private FolderOwner owner;
   //other attributes
}

我的问题是如何在hibernate中映射它们,考虑到FolderOwner中的那些泛型类型?我已经在这个论坛上阅读了一些答案,but they've done them using annotations.我对Hibernate映射很新,我更喜欢XML映射而不是注释。

我对User

的映射
<class name="com.fileManagement.dataDesign.User" table="user">
    <id name="id" type="string" column="id"/>
    <property name="lastName" column="lastName" type="string" not-null="true"/>
    <property name="firstName" column="firstName" type="string"/>
    <property name="middleName" column="middleName" type="string"/>
</class>

我对部门的映射

<class name="com.fileManagement.dataDesign.Department" table="department">
    <id name="id" type="int" column="id">
        <generator class="native"/>
    </id>
    <property name="name" column="name" type="string"/>
</class>

请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

如果您想要所有表中存在的基本数据字段,请使用基类中的@MappedSuperclass并从那里扩展实体。

<强>更新

hibernate可以使用不同类型的继承。请参阅http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html上的优秀文档。

除了继承hibernate之外,jpa还有@mappedsuperclass注释。优点是你的超类必须是一个实体,你可以重用已经注释的所有东西。

我的用例是三个相同的表(dimension1,dimension2,dimension3),由另一个表引用。 但你可以想到许多其他好用例,如创建,删除和更新时间戳,onwer,createdBy和updatedBy字段...

您所要做的就是像在实体中通常那样注释超类字段并扩展该类。