java - Hibernate:通过附加表实现多对多

标签 java hibernate orm entity-relationship foreign-key-relationship

我有这些表,组织可以是许多消息的发送者或接收者,一条消息可以有 2 个组织发送或接收。我知道我的数据库没有意义,但我无法更改它:

enter imad description here

那么,我是否将 SenderReceiver 连接到 Msg 作为 1 对 n,并将 Organization 连接到 SenderReceiver 作为 n 对 1?或者反之亦然 n-to1 和 1-to-n?

发件人:

public class Senderreceiver implements java.io.Serializable {

        private Set<Organization> organizations = new HashSet();
        private Set<Msg> msg = new HashSet();

xml 文件:

<set fetch="select" inverse="true" lazy="true" name="msgs" table="MSG">
      <key>
        <column name="MsgID" not-null="true"/>
      </key>
      <one-to-many class="entity3.Msg"/>
    </set>



<set fetch="select" inverse="true" lazy="true" name="organizations"  table="ORGANIZATION">
      <key>
        <column name="OrganizationID" not-null="true"/>
      </key>
      <one-to-many class="entity3.Organization"/>
    </set>

消息:

public class Msg implements java.io.Serializable {

        private Senderreceiver senderreceiver;

xml:

<many-to-one class="entity3.Senderreceiver" fetch="select" name="senderreceiver">
      <column name="SenderReceiverID" not-null="true"/>
    </many-to-one>

组织:

public class Organization implements java.io.Serializable {

        private Senderreceiver senderreceiver;

xml:

 <many-to-one class="entity3.Senderreceiver" fetch="select" name="senderreceiver">
          <column name="SenderReceiverID" not-null="true"/>
        </many-to-one>

如有任何帮助,我们将不胜感激。提前致谢!

最佳答案

我建议这样做:

在我看来,这是 2-N 关系。一个组织可以发送很多消息,一条消息只能由一个或两个组织发送或接收。您不需要连接表。

在组织中放置一组消息 - 这将代表组织发送/接收的消息。您还可以制作 2 组 - sentMSGSreceivedMSGS

并将组织的 FK 放在消息本身中,因为这将代表消息的组织。您可以在消息中放入 sentIDreceviedID

我认为这将使表和程序的理解更加容易。

如果您选择保留原始关系,则多对多关系将显示为:

1-N-1(Organization-SenderReceiver-Msg)。

Organization-SenderReceiver 是 1-N SenderReceiver-Msg 是 N-1。

因此,您在 OrganizationMsg 类中都放置了一个 SenderReceiver 集合。以及 SenderReceiver 中的 OrganizationMsg 对象。

关于java - Hibernate:通过附加表实现多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8209772/

相关文章:

java - 在指定文件夹中查找扩展名为.java的文件

java.io.IOException : Stream closed - on Tomcat 8 - JavaMelody - JAX WS 异常

java - Retrofit2 - 在带有正文的 POST 上收到 400 个错误请求

php - Yii 向 CDbCriteria 添加一个选择

Golang GORM 和几个表关联

java - 在 Java 中抛出 ArithmeticException() 的所有无效操作的列表?

java - 读取 Hibernate 实体标识值

java - Hibernate:是否可以在事务提交时自动清除 session ?

java - 在 DispatcherServlet 中未找到带有 URI 的 HTTP 请求的映射 - 上下文组件扫描不起作用

orm - 学说2 ArrayCollection过滤方法