【发布时间】:2016-06-30 10:14:52
【问题描述】:
我有父 Filter 实体和一个方向 List<Ad>ads 作为具有@OneToManyrelation 的孩子。我尝试使用 Hibernate hql 查询删除超过一周的广告,但得到:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(
gecars.filters_ads,约束FK_gcri6h0918u8o2ybd6yfquk79外键(ads_id)参考@ 987654330@(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();
}
【问题讨论】:
-
尝试级联:@OneToMany(cascade = CascadeType.ALL)
-
我试过了。不工作,得到同样的异常。