【问题标题】:Hibernate mapping with Generics使用泛型进行休眠映射
【发布时间】:2014-10-05 07:56:09
【问题描述】:

我有这门课

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
}

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

我对@9​​87654329@的映射

<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>

请帮忙。谢谢。

【问题讨论】:

    标签: java hibernate generics hibernate-mapping


    【解决方案1】:

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

    更新

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

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

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

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

    【讨论】:

    • 请赐教。我这里没有使用继承。
    • 更新了答案。需要代码吗?
    • 谢谢,但我想说的是我没有在我的代码中使用继承。用户和部门没有共同的基类(当然对象除外)。我想要完成的是我希望 Hibernate 映射我的 FolderOwner 类,其中 T 可能是一种用户或部门。在我的设计中,Folder 类具有 FolderOwner 属性。这意味着 Folder 类的实例可以有一个 FolderOwner 或 FolderOwner。这个线程stackoverflow.com/questions/7000428/… 主要回答了,但他们使用注释来实现它。我想要 XML。
    猜你喜欢
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多