当前位置: 首页 > 知识库问答 >
问题:

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

佴波鸿
2023-03-14

我有两个这样的等级:

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根据消息中的类型字段对消息对象进行分组。

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

共有1个答案

酆晔
2023-03-14

我的课堂

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

最后,您将得到一条带有类型鉴别器的表消息,并向MY\u CLASS表发送一个FK。

 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
    )
 类似资料:
  • 当我映射同一个实体时,就像这里回答的那样: Hibernate与同一实体的多对多关联 在“tbl_friends”表中,我有相同含义的行。例如,我有id=1的用户和id=2的用户。在“tbl_friends”表中,当他们作为朋友链接时,我有两行 使用Hibernate或JPA引用是否可以在一行(1-2或2-1)中建立这种关系?

  • 我正在尝试编写一个简单的应用程序,其中包含一个跟踪每个用户支付的款项的表和一个包含每个用户支付的总金额(所有付款的总和)的第二个表。目前,两个表都有相同的字段(firstName、lastName、金额),我已经将它们从同一个Java类映射到多个表,我无法将该类映射到多个表。对此有什么简单的解决方案吗?

  • 问题内容: 嗨,我正在尝试在hibernate状态下映射一些类,但在如何完成此类映射方面存在一般性问题。有User类和Facebook用户类,它们具有以下结构User Class: Facebook类FbUser可以具有属于同一类FbUser的对象的Friends列表。 到现在为止,我在User和FbUser之间建立了许多一对一的关系。 现在,FbUser映射: 如何在FbUser Map文件中映

  • 我有3个表、、。 是表中的主键,也是、表中的主键和外键。我有一个sql,它在这三个表上留下了外部连接,以从三个表中获取不同的列值。 问题:/表首次为空。这2个表将由其他进程更新。在对obj执行一些udpates并将其保存后,创建了一个新行和,其cstid为。 注意:对于表中的特定,存在一行或多行 必需的解决方案:我不希望在/表中保留一行,除非在/中存在来自的的一行。 映射:customer.hbm

  • 问题内容: 我正在尝试建立一个PostgreSQL表,该表具有两个指向另一个表中相同主键的外键。 运行脚本时出现错误 sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系Company.stakeholder的父/子表之间的联接条件- 有多个链接表的外键路径。指定“ foreign_keys”参数,提供这些列的列表,这些列应被视为包含对父表的外键引用。 那

  • 如果在中只有一组,这将非常好地工作。ASSESSMENT_COMMENT只有两列: 它将完美地代表一对多的关系。 现在问题来了: 那么,1)这是Hibernate中已知的bug吗?2)有办法解决这个问题吗?我可以强制Hibernate创建两个映射表,每个映射表一个吗?请记住,我不能更改类来引用(业务逻辑需求)