我有一个一对多的关系:的Hibernate,JPA不能删除一个一对多的关系
@Entity
@Table(name = "Users")
public class User {
@Id
@Column(name = "user_id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "login", nullable = false)
private String login;
@Column(name = "password", nullable = false)
private String password;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "role_id", nullable = false)
private Role role;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = javax.persistence.CascadeType.ALL)
private Set<Contacts> contacts = new HashSet<Contacts>();
我试图删除User
对象的所有联系人;我试图用:
cascade = javax.persistence.CascadeType.ALL
cascade = javax.persistence.CascadeType.REMOVE
@Cascade(CascadeType.DELETE)
从org.hibernate.annotations
@Cascade(CascadeType.DELETE_ORPHAN)
从org.hibernate.annotations
但nothi ng帮助。我总是得到异常:
一个删除用户org.hibernate.util.JDBCExceptionReporter - 不能删除或更新 父行:外键约束失败 (
contactmanager
contact
,约束contact_ibfk_1
FOREIGN KEY (user_id
)参考文献
UPD 代码如下:
@Transactional
public void removeUser(User user) {
sessionFactory.getCurrentSession().delete(user);
}
我会感谢任何帮助!谢谢。
您是否尝试在'OneToMany'关系上设置'orphanRemoval = true'?另外,你如何试图删除记录? – DannyMo
是的,我已经。但由于某种原因,Maven告诉我:'注释类型OneToMany'的属性orphanRemoval未定义。 –
'orphanRemoval'是在JPA 2.0中引入的,所以如果你使用的是旧版本,可以解释为什么它是未定义的。 'orphanRemoval'总是适用于我的类似关系(使用eclipselink)。这听起来像'CascadeType.DELETE_ORPHAN'是一个Hibernate特定的(和不赞成的)相当于'orphanRemoval',所以我不知道为什么它不适合你。最后一个想法是确保你有'equals'和'hashCode' [正确定义](http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/persistent-classes.html #持久类-equalshashcode)。 – DannyMo