12

customer と customerhistory の 2 つのテーブルがあります。customhistory には、顧客の customerId を参照する外部キー customerId があります。JPAによって生成されたエンティティでは、customerhistoryクラスに顧客のオブジェクトがありますが、consumerhistoryテーブルにcustomerIdのみを保存したい

正しいcustomerIdを取得していますが、属性customerIdを保存したい場合、顧客のオブジェクトしかありませんが、consumerhistoryの自動生成されたエンティティクラスにはcustomerIdがありません

@Entity
public class Customerhistory implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int primarykeyId;

    //bi-directional many-to-one association to Customer
    @ManyToOne
    @JoinColumn(name="CustomerId")
    private Customer customer;

上記のように、エンティティ customerHistory に customerId がありません。それを保存する方法?

4

3 に答える 3

24

entityManager のgetReference呼び出しを使用して、ID を使用して顧客オブジェクトをロードし、それを顧客履歴に設定します。ほとんどの場合、この呼び出しは ID だけが埋め込まれたプロキシを返します。顧客の他のメソッドが呼び出されない限り、顧客属性は読み込まれません。

Customer customer = entityManager.getReference(Customer.class, cutomerId);

CustomerHistory newCustomerHistory = new CustomerHistory();
newCustomerHistory.setCustomer(customer);
entityManager.persist(newCustomerHistory);
于 2013-05-15T18:50:11.840 に答える
2

テーブル間の関連付けは JPA によって管理され、customerHistory の customerId にアクセスすることは想定されていません。関連する履歴エントリを操作するには、customer.getHistory() (またはそれを呼び出したもの) を使用する必要があります。参照整合性は JPA によって管理されます。

于 2013-05-15T18:22:03.027 に答える