2

とという名前の2つのエンティティクラスがCustomerありActivityます。

CustomercustomerId、、ここではcustomerName、関係によってマップされたそれぞれに対応するセットを保持します。activitiesactivitiesActivityCustomer@OneToMany(mappedBy = "customer")

クラスは次のCustomerように定義されています(わかりやすくするために、他のフィールドといくつかのゲッターとセッターを削除しました)。

@javax.persistence.Entity
@Table(name = "CUSTOMER")
public class Customer extends Entity {

    private String customerId;
    private String customerName;
    private Set<Activity> activities;

    @NaturalId
    @Column(name = "CUSTOMER_ID", nullable = false)
    public String getCustomerId() {
        return customerId;
    }

    @Column(name = "CUSTOMER_NAME", nullable = false)
    public String getCustomerName() {
        return customerName;
    }

    @OneToMany(mappedBy = "customer", fetch = FetchType.LAZY)
    @Cascade(CascadeType.SAVE_UPDATE)
    public Set<Activity> getActivities() {
        return activities;
    }
}

Activity、、がactivityIdあり、これはとの関係 によってマップされます。activityNamecustomercustomerId@ManyToOne

Activityクラスは次のように定義されます。

@javax.persistence.Entity
@Table(name = "ACTIVITY")
public class Activity extends Entity {

    private String activityId;
    private String activityName;
    private Customer customer;

    @NaturalId
    @Column(name = "ACTIVITY_ID", nullable = false)
    public String getActivityId() {
        return activityId;
    }

    @Column(name = "ACTIVITY_NAME", nullable = false)
    public String getActivityName() {
        return activityName;
    }

    @ManyToOne
    @JoinColumn(name = "CUSTOMER_ID", nullable = false)
    public Customer getCustomer() {
        return customer;
    }
}

新しいを保存する前に、これをのセットにActivity追加しています。ActivityactivitiesCustomer

私は知りたいです:

  • activitiesのはどこCustomerに保存されていますか?
  • 両方のエンティティの更新および削除操作は互いにどのように影響しますか?
  • @OneToManyそれは創造と@ManyToOne関係を築く正しい方法ですか?
  • に列名を追加できますactivitiesか?

私はHibernateの初心者ですが、どのポインターも非常に役立ちます。

前もって感謝します。

4

1 に答える 1

1

-お客様の活動はどこに保存されていますか?

DBのどこにも「顧客のアクティビティ」として保存されません。顧客のアクティビティが必要な場合は、customer_id列の結合クエリを使用して顧客と一緒にロードされるか、後でロードされます(遅延読み込み)。列をフィルタリングする別のクエリを使用しcustomer_idます。

-両方のエンティティの更新操作と削除操作は互いにどのように影響しますか?

アクティビティを削除しても顧客には影響しませんが、次にそのアクティビティが読み込まれると、削除されたアクティビティはコレクションの一部ではなくなります。

顧客アクティビティの削除を、のカスケード属性を使用して定義する方法@ManyToOne。次に例を示します。

@OneToMany(mappedBy = "customer", cascade = CascadeType.REMOVE)

基本的に、望ましい動作は、顧客なしでアクティビティが単独で存在できるかどうかによって異なります。存在する場合は、顧客を削除customer_idし、アクティビティテーブルでフィールドをnullに設定できます。それ以外の場合、顧客に属するアクティビティは「カスケード削除」されます。または、最初にすべてのアクティビティを削除する前に、顧客を削除することはできません。

-@ OneToManyと@ManyToOneの関係を作成する正しい方法ですか?

はい、それは正しいです。

-アクティビティに列名を追加できますか?

いいえ、意味がありません。列に含めることができるIDは1つだけであり、アクティビティはコレクションです。

これがお役に立てば幸いです。

于 2013-02-01T07:05:30.700 に答える