gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:43:47 24 4
gpt4 key购买 nike

我有这些表,组织可以是许多消息的发送者或接收者,一条消息可以有 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-NSenderReceiver-Msg 是 N-1。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com