hibernate - 刷新订单一对多单向映射
问题描述
我有一个以“ Item
”类为父级和“ ItemSizeCost
”类为子级的一对多映射。
我在父类中添加了@OneToMany
和。@JoinColumn
当我尝试坚持 parent 时,我看到 hibernate 发出三个 sql 语句
insert into item (category_id, description, name) values (?, ?, ?)
insert into item_size_cost (cost, item_id, size_id) values (?, ?, ?)
update item_size_cost set item_id=? where id=?
我想了解最后两个语句(插入子项和更新子项)背后的原因。经过一番谷歌搜索,我发现原因可能与休眠的刷新顺序有关,但不能完全理解。任何人都有任何好的链接来了解 Hibernate 的刷新顺序吗?任何解释将不胜感激。我在下面提到我的课程-
Item -
@Entity
@Table(name="item")
public class Item {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="category_id")
private Category category;
@Column(name="name")
private String name;
@Column(name="description")
private String description;
@OneToMany(fetch = FetchType.LAZY,
cascade= {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE})
@JoinColumn(name="item_id")
List<ItemSizeCost> itemSizeCostList;
.....
}
ItemSizeCost -
@Entity
@Table(name="item_size_cost")
public class ItemSizeCost {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@ManyToOne(fetch = FetchType.LAZY)
/*@JoinColumn(name="item_id")*/
private Item item;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="size_id")
private Size size;
@Column(name="cost")
private double cost;
....
}
解决方案
最后两个语句的原因是双向映射和外键可以为空的事实。
Vlad Mihalcea 有一篇关于这个主题的优秀文章。他是 Hibernate 提交者:https ://vladmihalcea.com/merge-entity-collections-jpa-hibernate/
推荐阅读
- javascript - 具有键嵌套状态的动态 setState()
- python - 有没有更好的方法将写作与背景分开?
- azure - 如何对 Azure 存储模拟器进行身份验证?
- powershell - 计算多个文件的评论数,包括多行评论
- c++ - 从函数返回 const char* 数组
- java - 一段时间后完全杀死一个未来
- swift - Swift / Firebase - 在播放之前下载一个 mp4
- delphi - TIdTcpClient 线程在一段时间后停止响应
- java - TestNG:使用多个测试类在套件文件中执行并行测试
- elasticsearch - 使用频率计数的前缀搜索