在我写的Spring / Hibernate / Java / Tomcat应用程序中,我在组织及其联系人之间有一个OneToMany关系。
组织1:M联系人(具有外键org_id)
在组织中我有这个领域:
@OneToMany(mappedBy="organization")
private List<Contact> contacts;
在联系我我有这个字段:
@ManyToOne
@JoinColumn(name="org_id")
private Organization organization;
到目前为止一切正常。现在我添加了一个Offer的概念。要约可以由组织提出,并且您与该特定要约的指定联系人交谈。
Offer为其组织(org_id)和指定联系人(contact_id)提供外键。
到目前为止,优惠看起来像是:
@OneToOne
@JoinColumn(...)
private Organization offering_org;
@OneToOne
@JoinColumn(...)
private Contact offering_contact;
以下是我的问题。我已经注释了Contact类以便与Organization一起使用。如果我尝试以通常的Hibernate方式保持Offer对象,我将需要将Organization对象和Contact对象的副本存储到Offer对象中。这似乎与我现有的组织冲突:联系使用两个Java类。例如,如果我使用Offer 1:1,如果我将它放入Contact类,我是否可以选择使用或同时使用两者?
由于Offer是另一种关系,我是否需要编写Contact的数据传输对象版本才能在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);
我认为没有理由创建组织对象的副本?
恰好是组织对象中的“联系人”集合也可以是一个或多个商品对象中的联系人。 / p>
答案 1 :(得分:0)
我认为我原来的问题有点愚蠢。我尝试的是把它放在Offer.java中:
@Column(name="org_id")
private Long orgId = null;
@Column(name="contact_id")
private Long contactId = null;
我手动填写orgId,因为优惠始终与用户的组织相关联。它是网页中的隐藏字段。
我在网页中放置了一个填充了适当的Contact对象(contact.id,contact.name)的SELECT。
提交网页时,将在@ModelAttribute参数中填写Offer的orgId和contactId字段。这就把我带到了我想去的地方。
为了解决mspringer先生的意见,如果我愿意在我的Offer对象中使用组织或联系人列表,那么您的示例可以起作用(您说明了“创建新的”情况)。这也是我原来问题的主题。但是,既然我发现我并不真的想要使用Offer中的扩展对象,也不希望这样,我可以避免我原来问题的主题。
感谢所有看到我的运动困惑的人。