0

私は2つのエンティティを手に入れました

Customer.class

@Entity
@Table(name = "Customer")
public class Customer {
    @Id
    private int id;
    @OneToMany(mappedBy = "customer"; fetch = FetchType.EAGER)
    private Set<Invoice> invoice;
}

Invoice.class

@Entity
@Table(name = "Invoice")
public class Invoice {
    @Id
    @ManyToOne
    @JoinColumn(name = "customer")
    private Customer customer;
    @Column(name = "price", nullable = false)
    private double price;
}

これらは両方とも persistence.xml でマップされます。

そう:

System.out.println(customer);

特定の顧客の場合、30 件の請求書エントリが返されますが、データベースには 33 件あります。

org.eclipse.persistence.jpa 2.5.0 と persistence-api 1.0.2 を使用しています

すべてのヒント/解決策に感謝します。

前もって感謝します。

4

1 に答える 1

0

問題/回答が見つかりました。返信が遅くなり申し訳ありません。

@EmbeddedId を試した後、@JoinColumn の挿入可能および更新可能を false と宣言する必要がありました。

Invoice.class の正しいマッピング

@Entity
@Table(name = "Invoice")
public class Invoice {
    @EmbeddedId
    private InvoiceId invoiceId;
    @ManyToOne
    @JoinColumn(name = "customerId", insertable = false, updatable = false)
    private Customer customer;
    @Column(name = "price", nullable = false)
    private double price;
}

@Embeddable
class InvoiceId implements Serializable {
    //Composite PK
    @Column(name = "customerId")
    private int customerId;
    @Column(name = "date")
    private Date date;
}
于 2013-05-27T08:37:29.030 に答える