Java Hibernate,JPA无法删除一对多关系

Java Hibernate,JPA无法删除一对多关系,java,hibernate,jpa,persistence,Java,Hibernate,Jpa,Persistence,我有一对多的关系: @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) priva

我有一对多的关系:

@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>();

我将感谢任何帮助!谢谢。

我的建议是自己进行关系管理。级联删除可能很棘手(特别是在像您这样的情况下,双向关系的所有者不是声明级联的人),而且往往非常危险,所以我通常更愿意避免它们。特别是如果您运行的是JPA2.0之前的版本,那么您没有太多的选择。我只想将删除方法更改为类似以下内容:

@Transactional
public void removeUser(User user) {
    Set<Contacts> contacts = user.getContacts();

    for (Contact contact : contacts) {
        sessionFactory.getCurrentSession().delete(contact);
    }

    contacts.clear();
    sessionFactory.getCurrentSession().delete(user);
}
@Transactional
public void removeUser(用户用户){
Set contacts=user.getContacts();
用于(联系人:联系人){
sessionFactory.getCurrentSession().delete(联系人);
}
contacts.clear();
sessionFactory.getCurrentSession().delete(用户);
}

您是否尝试过在
OneToMany
关系上设置
orphaneremovation=true
?还有,你是如何删除这些记录的?是的,我已经删除了。但出于某种原因,Maven告诉我:“注释类型OneToMany的属性OrphanRemoving是未定义的”。
OrphanRemoving
是在JPA2.0中引入的,因此如果您使用的是较旧的版本,可以解释为什么它未定义<代码>删除孤儿在类似的关系中始终适用于我(使用eclipselink)。这听起来像是级联类型。DELETE_ORPHAN是一种特定于Hibernate的(并且已被弃用)等效于
orphanRemoving
,所以我不确定它为什么对您不起作用。最后一个想法是确保
等于
hashCode
@Transactional
public void removeUser(User user) {
    Set<Contacts> contacts = user.getContacts();

    for (Contact contact : contacts) {
        sessionFactory.getCurrentSession().delete(contact);
    }

    contacts.clear();
    sessionFactory.getCurrentSession().delete(user);
}