【发布时间】:2014-09-10 07:54:33
【问题描述】:
我有两个与 OneToMany 关联的类 - ManyToOne 映射。 当我选择父实体时,它也会选择子实体,但是,分配给它的所有子实例都是每个父实例,而不是分配相关实例。
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;
}
当使用 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 - 2014 年 7 月 18 日
并且 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
我的配置或其他配置有什么问题???
预期 : 每个 PurchaseEntry 对象在 purchaseDetailsList 中只有一个相关的 PurchaseDetails 实例
【问题讨论】:
标签: hibernate jpa hibernate-mapping hibernate-onetomany