我有两个与 OneToMany 关联的类 - ManyToOne 映射。当我选择父实体时,它也会选择子实体,但是,分配给它的所有子实例都是每个父实例,而不是分配相关实例。
购买入口.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>();
}
购买详情.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;
}
当使用 PurchaseDetails.java 实例 Collection 保存 PurchaseEntry.java 对象时,它工作正常,但是在选择父表时,它会选择相关的子表行,但这相关的所有行都分配给每个父类对象
选择查询
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,purchase_id - 1,...
PURCHASE_DETAIL_ID - 2, purchase_id - 1, ...
PURCHASE_DETAIL_ID - 3,purchase_id - 1,...
当我使用invoice_date '18-07-2014' 的条件选择 PurchaseEntry时, 它返回 3 个 PurchaseEntry 对象,在每个 PurchaseEntry 对象 purchaseDetailsList 中有 3 个与purchase_id = 1相关的 PurchaseDetails 对象
我的配置或其他有什么问题???
预期:每个 PurchaseEntry 对象在 purchaseDetailsList 中只有一个相关的 PurchaseDetails 实例