Hibernate无法删除子项(MySQLIntegrityConstraintViolationException)

埃德加·卡尔卡(Edgar Karka)

我有3个Java Hibernate实体。EntityUser进行单向oneToMany交互FilterFilter实体实体具有单向manyToOne关系Model我只想删除Filter实体,但要获取MySQLIntegrityConstraintViolationException

无法删除或更新父行:外键约束失败(gecarsusers_filters,CONSTRAINT FK_oymjo03tkarckpfjfmaak99ljFOREIGN KEY(filters_id)参考filtersid))

用户:

@Entity
@Table(name="users")
public class User {
    ...
    //@OneToMany(fetch = FetchType.LAZY) // old
    @OneToMany(fetch = FetchType.LAZY,cascade=CascadeType.ALL) //edited but exception still occurs
    private Set<Filter> filters = new HashSet<Filter>(0);

筛选:

@Entity
@Table(name="filters")
public class Filter {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "fk_model") 
private Model model;
...

DAO类中的delete方法:

public void deleteFilter(int filterId){
    String hql = "delete from Filter where id= :filterId";
    session.createQuery(hql).setInteger("filterId", filterId).executeUpdate();
}

session.delete

public void deleteFilter(int filterId){
    try {
        session.beginTransaction();
        session.delete(getFilter(filterId));
        session.getTransaction().commit();
    } catch (Exception e) {
        e.printStackTrace();
        session.getTransaction().rollback();
    }

}
德拉甘·博扎诺维奇(Dragan Bozanovic)

您正在使用联接表进行一对多关联。我假设您已经从映射自动生成了架构,因此您可能不知道这一点。这样,当您Filter通过批量Hibernate DML语句删除s时,联接表中的记录将保留并导致违反外键约束。

最好的方法是在多个方面定义一个联接列:

@Entity
@Table(name="filters")
public class Filter {
  @ManyToOne
  @JoinColumn(name = "user") 
  private User user;
}

@Entity
@Table(name="users")
public class User {
  @OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.All, mappedBy="user")
  private Set<Filter> filters = new HashSet<Filter>(0);
}

如果您不想使用双向关联,则可以在User实体中定义连接列

@Entity
@Table(name="users")
public class User {
  @OneToMany(fetch = FetchType.LAZY, cascade=CascadeType.All)
  @JoinColumn(name = "user")       
  private Set<Filter> filters = new HashSet<Filter>(0);
}

这样,联接列仍将在filters表中,因此删除Filter不会导致外键冲突。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Hibernate OneToMany MySQLIntegrityConstraintViolationException:重复的条目

来自分类Dev

MySQLIntegrityConstraintViolationException

来自分类Dev

在特定情况下,Hibernate不会从带有子项的集合中删除对象

来自分类Dev

另一个事务删除 Lazy 子项时的 JPA-Hibernate 行为

来自分类Dev

从 StackPanel 中删除子项

来自分类Dev

如何删除 QTreeWidgetItem 的子项

来自分类Dev

添加和删除子项

来自分类Dev

删除 JSON 子项

来自分类Dev

删除视图的子项然后阅读后,该视图将无法正确显示

来自分类Dev

删除实体时我该怎么办?MySQLIntegrityConstraintViolationException

来自分类Dev

删除实体时我该怎么办?MySQLIntegrityConstraintViolationException

来自分类Dev

如何通过子项本身中的删除按钮删除子项组件

来自分类Dev

从QVBoxLayout删除所有子项

来自分类Dev

SQL删除重复的父子项

来自分类Dev

Android从RecyclerView中删除子项

来自分类Dev

从 Json 对象中删除子项

来自分类Dev

删除从其子项引用的 UIView?

来自分类Dev

JPA删除子项删除父项

来自分类Dev

Hibernate JPQL引发无法输入更新/删除查询

来自分类Dev

在Hibernate中无法删除没有孩子的父母

来自分类Dev

Hibernate 抛出无法删除或更新父行异常

来自分类Dev

删除对象数组中的所有子项

来自分类Dev

从github删除子项目提交

来自分类Dev

Sitecore-删除存储桶子项

来自分类Dev

附加到子项时删除onclick

来自分类Dev

Arangodb从文档中删除子项目

来自分类Dev

Powershell脚本不删除子项

来自分类Dev

附加到子项时删除onclick

来自分类Dev

尝试在鼠标悬停时删除子项