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;

これまでのところ、すべて正常に機能しています。今、オファーの概念を追加しています。オファーは組織によって行うことができ、その特定のオファーについて指定された連絡先と話します。

オファーには、その組織 (org_id) および指定された連絡先 (contact_id) の外部キーがあります。

これまでのところ、オファーは次のようになります。

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

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

これが私の質問のポイントです。Organization で使用するために Contact クラスにすでに注釈を付けました。通常の Hibernate の方法で Offer オブジェクトを永続化しようとすると、Organization オブジェクトと Contact オブジェクトのコピーを Offer オブジェクトに保存する必要があります。これは、私の既存の組織と競合しているようです: 2 つの Java クラスの連絡先の使用。たとえば、Offer で 1 対 1 を使用している場合、これを Contact クラスに入れると、どちらかをオプションで使用できますか、それとも両方を同時に使用する必要がありますか?

オファーはもう 1 つの関係であるため、オファー関係で使用する Contact のデータ転送オブジェクト バージョンを作成する必要がありますか?

ありがとう、ジェローム。

4

2 に答える 2

0

私の最初の質問はちょっとばかげていると思います。私が試したのは、これをOffer.javaに入れることです。

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

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

オファーは常にユーザーの組織に関連付けられているため、orgIdを手動で入力します。これは、Webページの非表示フィールドです。

適切なContactオブジェクト(contact.id、contact.name)で満たされたSELECTをWebページに配置しました。

Webページが送信されると、オファーのorgIdフィールドとcontactIdフィールドが@ModelAttributeパラメーターに入力されます。これは私が行きたいところに私を連れて行きます。

mspringer氏のコメントに対処するために、Offerオブジェクトで組織または連絡先リストを使用する場合は、例が機能する可能性があります(「新しい作成」の状況を示しています)。それは私の最初の質問のトピックでもあります。しかし、Offer内の拡張されたオブジェクトを実際に操作したくない、または実行したくないことがわかったので、元の質問のトピックを回避できます。

混乱して私の運動を見てくれたすべての人に感謝します。

于 2013-02-07T14:47:11.910 に答える
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
オブジェクト 内の「連絡先」のコレクションが、1 つ以上のOfferオブジェクト内のContactになることもあります。

于 2013-02-06T11:57:12.143 に答える