java - 使用休眠插入两个依赖实体时出现死锁
问题描述
我有两个实体:用户和操作相关的一个用户到多个操作的 ID。
我创建了它们的实例并希望将它们插入数据库。
如果我先插入用户然后插入操作,就可以了。但是,如果我在插入用户之前插入操作,我将陷入死锁,因为将插入等待实际用户的操作。
如何在插入操作实体之前检查是否插入了用户?
代码示例:
@Entity
class User{
@Id
Integer userID;
@OneToMany(mappedBy = "actions", targetEntity = Action.class, cascade = CascadeType.ALL)
List<Action> actions = new ArrayList<>();
//getters and setters
}
@Entity
class Action{
@Id
Integer actionID;
@ManyToOne(fetch = FetchType.EAGER, targetEntity = User.class)
@JoinColumn(name = "user_id", nullable = false)
User user;
//getters and setters
}
解决方案
在 User 中,操作上的 mappedBy 应该是“user”,即 Action 类中引用 User 类的属性的名称。但是,在设置中,我相信如果您在插入新用户之前将新操作添加到用户下的操作列表中,则新操作将插入到同一语句中。(打算将此添加为评论,但没有足够的代表。)
推荐阅读
- python - 将“on_start 数据”传递给 MyScreen 和 MyImage 需要 ScreenManager 中的屏幕名称
- json - 将 JSON 节点转换为要选择的列
- c# - 有没有办法检查数据库中是否存在文本文件中的数据?
- javascript - 参数在 RN typescript 中隐式具有任何类型
- ruby - 如何清理 Ruby 脚本中的原始 SQL
- java - 如何在tomcat中标记JSESSIONID安全?
- laravel - Laravel 5.8 在后台运行 PHP Artisan 命令,同时单击 Blade View 中的按钮
- node.js - 如果我事先不知道我可能从客户端收到多少个查询字符串,如何通过多个查询参数过滤结果?
- javascript - Javascript/JQuery 错误消息没有隐藏在 Safari 中
- android - 如何使用多行下拉项目布局制作 Material ExposedDropdownMenu?