【发布时间】:2013-05-30 18:27:52
【问题描述】:
我有一对多的关系:
@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
但没有任何帮助。我总是遇到异常:
org.hibernate.util.JDBCExceptionReporter - 无法删除或更新 父行:外键约束失败 (
contactmanager.contact, 约束contact_ibfk_1外键 (user_id) 参考文献
UPD 删除用户的代码如下:
@Transactional
public void removeUser(User user) {
sessionFactory.getCurrentSession().delete(user);
}
我将不胜感激任何帮助!谢谢。
【问题讨论】:
-
您是否尝试在
OneToMany关系上设置orphanRemoval = true?另外,您是如何尝试删除记录的? -
是的,我有。但出于某种原因,Maven 告诉我:“注释类型 OneToMany 的属性 orphanRemoval 未定义”。
-
orphanRemoval是在 JPA 2.0 中引入的,所以如果您使用的是旧版本,可以解释为什么它未定义。orphanRemoval在类似的关系上总是对我有用(使用 eclipselink)。听起来CascadeType.DELETE_ORPHAN是特定于Hibernate(且已弃用)的,相当于orphanRemoval,所以我不确定为什么它不适合你。最后一个想法是确保您拥有equals和hashCodeproperly defined。
标签: java hibernate jpa persistence