我有这些表,组织可以是许多消息的发送者或接收者,msg可以有2个发送或接收的组织。我知道我的数据库没有意义,但我无法改变它:
那么,我将SenderReceiver连接到Msg为1对n,组织对SenderReceiver为n对1吗?反之亦然n-to1和1-to-n?
Senderreceiver :
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>
任何帮助都会被接受。提前谢谢!
答案 0 :(得分:1)
我会建议:
我认为,这是2-N关系。组织可以发送许多消息,并且只能由一个或两个组织发送或接收消息。你不需要连接表。
在组织中放置一组消息 - 这将代表组织发送/接收的消息。您还可以制作2套 - sentMSGS
和receivedMSGS
。
并将组织的FK放在消息本身中,因为这将重新显示消息的组织。您可以在邮件中添加sentID
和receviedID
。
我认为这将使表格和程序的理解更加容易。
如果您选择保留原始关系,则多对多关系将显示为:
1-N-1(Organization-SenderReceiver-Msg
)。
Organization-SenderReceiver
是1-N
而SenderReceiver-Msg
是N-1。
因此,您在SenderReceiver
和Organization
类中添加了Msg
的集合。以及Organization
中的Msg
和SenderReceiver
对象。
答案 1 :(得分:1)
SenderReceiver表具有组织的外键和Message的外键。这清楚地表明SenderReceiver可能只有一个Message和一个组织。
你有
是否映射所有这些关联取决于您。每个关联可以是单向的或双向的。