当前位置: 首页 > 知识库问答 >
问题:

Hibernate hsql删除的MySQLIntegrityConstraintViolationException。无法删除或更新父行

段干德泽
2023-03-14

我有父筛选器实体和一个方向列表 ads 作为具有@OneTomany关系的子实体。我尝试使用Hibernatehql查询删除超过一周的广告,但得到的结果是:

com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法删除或更新父行:外键约束失败(gecars.filters_ads,constraintfk_gcri6h0918u8o2ybd6yfquk79外键(ads_id)引用ads(id)

用户:

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

筛选器:

@Entity
@Table(name="filters")
public class Filter {
  ...
  // I also tried use @OneToMany(CascadeType.REMOVE, orphanremoval=true)
  // or @OneToMany(cascade=CascadeType.ALL,orphanRemoval=true)
  @OneToMany 
  private Set<Ad> ads; 
  ...

广告:

@Entity
@Table(name="ads")
public class Ad {
 ...
 private Date insertTime = new Date();
 ...

DAO删除方法:

public void deleteOldAds(Date date){
    String hql = "delete from Ad where insertTime < :date";
    session.createQuery(hql).setParameter("date",  date).executeUpdate();
}

共有1个答案

柳翼
2023-03-14

问题的原因是,如果@OneTomany关联方是关系的所有者,则使用联接表。

要指定ADS表中的联接列(外键)用于关联,而不是单独的联接表,只需将关联映射为@JoinColumn:

@OneToMany
@JoinColumn 
private Set<Ad> ads; 
 类似资料:
  • 我有两个对象实体(用户和电话),它们应该有多对多关系。 使用者JAVA 电话JAVA 现在,我在用户表中添加了两个ID为1和2的用户。然后,我添加一个id为1的手机,并将它们映射到两个用户id(1) 我的用户电话表如下所示: 现在,我想删除一个ID为2的用户。当我尝试这样做时,我得到了一个错误 我的删除脚本: 知道我哪里出错了吗?非常感谢:)

  • 当我试图删除宠物时,我得到了这个错误。这个宠物,有访问(子),但我在宠物实体中定义了CASCADE. ALL。任何想法?错误:无法删除或更新父行:外键约束失败(。 访问类:

  • 问题内容: 进行时: 错误: 这是我的桌子: 问题答案: 照原样,必须先删除Advertisers表中的行,然后才能删除它引用的Jobs表中的行。这个: …实际上与应有的相反。实际上,这意味着您必须在作业表中有一条记录,然后才是广告商。因此,您需要使用: 纠正外键关系后,您的delete语句将起作用。

  • 我试图从MySQL中的多个表中删除记录,但我不断得到一个错误,错误内容为。 这是我正在尝试运行的SQL语句: 我试过在删除级联上执行

  • 关于这个问题有好几篇帖子,但仍然没有找到答案。这是父类Userr。在@OneToMany关系中,我想删除一个特定的子帐户。 现在,当我通过“删除”查询执行此操作时,我得到以下异常。 组织。springframework。刀。InvalidDataAccessApiUsageException:执行更新/删除查询;嵌套的异常是javax。坚持不懈TransactionRequiredExceptio

  • 我还在学习hibernate中的很多东西,以及如何处理hibernate中表与表之间的关系,所以在我的一个项目中,我面临着以下问题: 问题出在哪里? 我想做什么? 我正在尝试删除package实体,但不删除package表中引用的用户 我正在通过packageDAO对package实体调用delete