0

在我正在编写的 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 具有其组织 (org_id) 和指定联系人 (contact_id) 的外键。

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

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

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

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

由于Offer是另一个关系,我是否需要编写Contact的数据传输对象版本以用于Offer关系?

谢谢,杰罗姆。

4

2 回答 2

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);

我认为没有理由创建组织对象的副本?
碰巧的是,Organization对象中的“联系人”集合也可以是一个或多个Offer对象中的Contact

于 2013-02-06T11:57:12.143 回答
0

我在想我原来的问题有点愚蠢。我所做的尝试是将其放在 Offer.java 中:

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

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

我手动填写 orgId,因为报价始终与用户的组织相关联。它是网页中的隐藏字段。

我在网页中放置了一个填充有适当联系人对象(contact.id、contact.name)的 SELECT。

提交网页时,Offer 的 orgId 和 contactId 字段将填写在 @ModelAttribute 参数中。这带我去我想去的地方。

为了解决 mspringer 先生的评论,如果我愿意在我的 Offer 对象中使用组织或联系人列表,您的示例可能会起作用(您说明了“创建新”情况)。这也是我最初问题的主题。但由于我发现我真的不想玩 Offer 中的扩展对象,我也不想玩,所以我可以避免我原来的问题的话题。

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

于 2013-02-07T14:47:11.910 回答