【发布时间】:2014-08-19 18:51:57
【问题描述】:
我试图了解如果我使用 @JoinColumn 与 Hibernate 中 @OneToMany 映射的 mappedBy 属性相比,生成的 DML 查询的差异。
如果我的 java 类定义为:
@Entity
public class Product {
@Id
String serialNumber;
@OneToMany
@JoinColumn(name = "PRODUCT_ID")
Set<Part> parts = new HashSet<Part>();
}
@Entity
public class Part {
@Id
@GeneratedValue
int id;
String partName;
}
然后我保存一个产品和零件然后休眠生成插入并更新查询:
Hibernate: insert into Product (serialNumber) values (?)
Hibernate: insert into Part (partName, id) values (?, ?)
Hibernate: update Part set PRODUCT_ID=? where id=?
现在,如果我将我的 java 类定义为:
@Entity
public class Customer {
@Id
@GeneratedValue
private Integer id;
@OneToMany(mappedBy = "customer")
private List<Order> orders;
}
@Entity
@Table(name="TBL_ORDER")
public class Order {
@Id
@GeneratedValue
private Integer id;
private int orderNumber;
@ManyToOne
private Customer customer;
@Override
public String toString() {
return id.toString();
}
}
那么 Hibernate 只生成插入查询,没有任何更新:
Hibernate: insert into Customer (id) values (?)
Hibernate: insert into TBL_ORDER (customer_id, orderNumber, id) values (?, ?, ?)
如果我的实体之间的关系只是一对多,那么为什么休眠需要在第一种情况下插入和更新,而只在第二种情况下插入查询?请解释一下。
【问题讨论】: