我有这些表,组织可以是许多消息的发送者或接收者,味精可以有2个发送或接收消息的组织。我知道我的数据库没有意义,但是我无法更改它:
那么,我是否将SenderReceiver以1对2的方式连接到Msg,将组织以n对1的方式连接到SenderReceiver?或反之亦然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套-sentMSGS
和receivedMSGS
。
并在邮件本身中放入组织的FK,因为这将代表邮件的组织。您可以在消息中放入sentID
和receviedID
。
我认为这将使对表格和程序的理解更加容易。
如果您选择保留原始关系,则多对多关系将显示为:
1-N-1(Organization-SenderReceiver-Msg
)。Organization-SenderReceiver
是1-NSenderReceiver-Msg
是N-1。
因此,您将SenderReceiver
的集合放在Organization
和Msg
类中。并且Organization
中的Msg
和SenderReceiver
的对象。