首页 > 解决方案 > 使用休眠插入两个依赖实体时出现死锁

问题描述

我有两个实体:用户和操作相关的一个用户到多个操作的 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
}

标签: javahibernate

解决方案


在 User 中,操作上的 mappedBy 应该是“user”,即 Action 类中引用 User 类的属性的名称。但是,在设置中,我相信如果您在插入新用户之前将新操作添加到用户下的操作列表中,则新操作将插入到同一语句中。(打算将此添加为评论,但没有足够的代表。)


推荐阅读