2013-02-05 34 views
0

在Spring/Hibernate/Java/Tomcat应用程序中,我正在编写组织与其联系人之间的OneToMany关系。Hibernate:具有两个不同ManyToOne关系的子表

组织1:M联系(有外键org_id)

在组织我有这样的领域:

@OneToMany(mappedBy="organization") 
private List<Contact> contacts; 

在跟我有这样的领域:

@ManyToOne 
@JoinColumn(name="org_id") 
private Organization organization; 

所有到目前为止工作正常。现在我添加一个优惠的概念。优惠可以由组织进行,并且您可以与指定的联系人联系以获得特定优惠。

优惠有其组织(org_id)和指定联系人(contact_id)的外键。

到目前为止,报价看起来像:

@OneToOne 
@JoinColumn(...) 
private Organization offering_org; 

@OneToOne 
@JoinColumn(...) 
private Contact offering_contact; 

这里来我的问题点。我已经注释了Contact类与Organization一起使用。如果我尝试以通常的Hibernate方式持续提供Offer对象,则需要将组织对象和Contact对象的副本存储到Offer对象中。这似乎与我现有的组织有冲突:联系使用这两个Java类。例如,如果我与Offer一起使用1:1,如果我将它放入Contact类,是否可以选择使用两者之一还是强制同时使用?

由于要约是另一种关系,是否需要编写联系人的数据传输对象版本以用于优惠关系?

谢谢, 杰罗姆。

回答

0

我在想我的原始问题有点愚蠢。我尝试的是将此放入Offer.java中:

@Column(name="org_id") 
private Long orgId = null; 

@Column(name="contact_id") 
private Long contactId = null; 

我手动填充orgId是因为优惠总是绑定到用户的组织。它是网页中的隐藏字段。

我把一个SELECT填充了适当的Contact对象(contact.id,contact.name)在网页中。

当提交网页时,Offer的orgId和contactId字段被填充到@ModelAttribute参数中。这把我带到了我想去的地方。

为了解决先生的意见,mspringer,如果我愿意使用我的Offer对象中的组织或联系人列表,您的示例可以工作(您说明了“创建新的”情况)。这也是我原来的问题的主题。但是,既然我看到我并不真的想要在提议中使用扩展对象,也不希望这样,我可以避开我最初提出的问题。

感谢所有看着我在困惑中练习的人。

+0

感谢您的回复。我在下面的“回答问题”中回答了你的回答。 –

0

也许我不完全理解的问题,但我只希望做这样的事情:

// contact & organization being already persisted entity objects 
Offer offer = new Offer(); 
offer.setOffering_org(organization); 
offer.setOffering_contact(contact); 

// Persisting the new Offer object to the database, 
// implicitly making the relations. 
service.saveObject(offer); 

我看不出有任何理由来创建组织对象的副本(S)?
它恰好是在组织对象中的“联系人”的集合也可以是联系人内的一个或多个提供对象。

+0

感谢您的回复。我在“回答问题”中解答了您的回复(请参阅第页上的其他地方)。 –

相关问题