OneToMany - ManyToOne マッピングに関連付けられた 2 つのクラスがあります。親エンティティを選択すると、子エンティティも選択されますが、それに割り当てられたすべての子インスタンスは、関連するインスタンスを割り当てるのではなく、すべての親インスタンスです。
PurchaseEntry.java
@Entity
@Table(name="PURCHASE_ENTRY")
public class PurchaseEntry {
public PurchaseEntry() {
}
@Id @Column(name="PURCHASE_ID") @GeneratedValue(strategy=GenerationType.AUTO)
private long purchaseId;
@Column(name="INVOICE_NO")
private String invoiceNo;
@Column(name="INVOICE_DATE")
@Type(type="date")
private Date invoiceDate;
@OneToMany(targetEntity=PurchaseDetails.class, cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="PURCHASE_ID")
private Collection<PurchaseDetails> purchaseDetailsList = new ArrayList<PurchaseDetails>();
}
PurchaseDetails.java
@Entity
@Table(name = "PURCHASE_DETAILS")
public class PurchaseDetails {
public PurchaseDetails() {
}
@Id
@Column(name = "PURCHASE_DETAIL_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long purchaseDetailId;
@Column(name = "AMOUNT")
private float amount;
@ManyToOne
@JoinColumn(name = "PURCHASE_ID")
private PurchaseEntry purchaseEntry;
}
PurchaseEntry.java オブジェクトを PurchaseDetails.java インスタンス Collection で保存すると正常に動作しますが、親テーブルを選択すると関連する子テーブルの行が選択されますが、これに関連するすべての行がすべての親クラス オブジェクトに割り当てられます。
クエリを選択
Criteria criteria = session.createCriteria(PurchaseEntry.class)
.add(Restrictions.between("invoiceDate", fromFilterDate, toFilterDate)).addOrder(Order.asc("invoiceDate"));
purchaseEntryList = criteria.list();
たとえば、 Purchase_Entry テーブルには次の行があります
purchase_id - 1、invoice_date - 18-07-2014
Purchase_details テーブルには
PURCHASE_DETAIL_ID - 1、購入 ID - 1、...
PURCHASE_DETAIL_ID - 2、購入 ID - 1、...
PURCHASE_DETAIL_ID - 3、購入 ID - 1、...
請求書の日付が '18 -07-2014 ' である基準を使用してPurchaseEntry を選択する と、3 つの PurchaseEntry オブジェクトが返されます。
私の設定やその他の何が問題になっていますか???
expected : すべての PurchaseEntry オブジェクトには、 purchaseDetailsList に関連する PurchaseDetails インスタンスが 1 つだけあります。