java - 如何使用 Hibernate 将多个多对一关系映射到同一个表和同一个键?

标签 java hibernate hibernate-mapping

我有两个这样的类(class):

public class Message implements Serializable {
    ...
    private int _messageId;
    private String _message;
    private String type;
    ...

还有

public class MyClass implements Serializable {
    private final int myClassId;
    ...
    private final List<Message> messagesOfTypeA;
    private final List<Message> messagesOfTypeB;
    private final List<Message> messagesOfTypeC;
    ...

我想使用 hibernate 来保留这两个类。 字段 messagesOfTypeA、messagesOfTypeB 和 messagesOfTypeC 根据 Message 中的类型字段对 Message 对象进行分组。

如何使用 XML hibernate 映射来映射 MyClass 和 Message 之间的一对多关系? (我使用的是 Hibernate 3.6)

最佳答案

我的类(class)

<hibernate-mapping>
  <class name="MyClass" table="my_class">
    <id name="myClassId" column="id">
      <generator class="native"/>
    </id>
    <list name="messagesOfTypeA" cascade="all" fetch="join">
       <key column="myclass_id"/>
       <list-index column="idx"/>
       <one-to-many class ="Message"/>
    </list> 
    <list name="messagesOfTypeB" cascade="all" fetch="join">
       <key column="myclass_id"/>
       <list-index column="idx"/>
       <one-to-many class ="Message"/>
    </list>  
    <list name="messagesOfTypeC" cascade="all" fetch="join">
       <key column="myclass_id"/>
       <list-index column="idx"/>
       <one-to-many class ="Message"/>
    </list>                               
  </class>
</hibernate-mapping>

留言

<hibernate-mapping>
  <class name="Message" table="message">
    <id name="_messageId" column="id">
      <generator class="native"/>
    </id>
    <property name="_message" column="message"/> 
    <property name="type"/>                         
  </class>
</hibernate-mapping>

您最终会得到一张表消息,其中包含类型判别式和一个 FK 到 MY_CLASS 表。

 CREATE TABLE "MESSAGE" 
   (    "ID" NUMBER(10,0) NOT NULL ENABLE, 
    "MESSAGE" VARCHAR2(255 CHAR), 
    "TYPE" VARCHAR2(255 CHAR), 
    "MYCLASS_ID" NUMBER(10,0), 
    "IDX" NUMBER(10,0), 
     PRIMARY KEY ("ID") 

     CONSTRAINT "FK_MY_CLASS" FOREIGN KEY ("MYCLASS_ID")
       REFERENCES  "MY_CLASS" ("ID") ENABLE
    )

关于java - 如何使用 Hibernate 将多个多对一关系映射到同一个表和同一个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33440988/

相关文章:

java - hibernate 映射: HQL many-to-one Query - how to retrieve attributes of crossed pojo objects

java - 检测 TCP 数据包丢失

java - 异常 : java. lang.NoClassDefFoundError: org/apache/log4j/PropertyConfigurator

hibernate - 华语 |获取 map 作为结果

java - Hibernate 中的 UDF

java - 我面临 "java.lang.IllegalArgumentException: Can not set int field com.example.demo.model.Customer.customerId to java.util.LinkedHashMap"

java - 为什么我会收到 org.hibernate.PropertyAccessException?

java - 如何在 ExoPlayer2 中隐藏控制按钮

java - 如何更改最里面的嵌套语句,但保留外部语句?

hibernate - 来自 grails 的带有 javaDB 和 Hibernate 的用户表