我有这个班级
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>
请帮忙。感谢。
答案 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字段...
您所要做的就是像在实体中通常那样注释超类字段并扩展该类。