Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠:无法删除引用的实体_Java_Hibernate - Fatal编程技术网

Java 休眠:无法删除引用的实体

Java 休眠:无法删除引用的实体,java,hibernate,Java,Hibernate,我拥有以下JPA实体: @Entity @Table(name = "BOOK") public class Book { @Id @GeneratedValue @Column(name = "ID") private long id; @OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true) @JoinColumn(name = &qu

我拥有以下JPA实体:

@Entity
@Table(name = "BOOK")
public class Book {

    @Id
    @GeneratedValue
    @Column(name = "ID")
    private long id;

    @OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true)
    @JoinColumn(name = "BOOK_ID")
    @Fetch(value = FetchMode.JOIN)
    @LazyCollection(LazyCollectionOption.FALSE)
    private Set<A> a_objects = new HashSet<>();

}


@Entity
@Table(name = "A")
public class A {

    @Id
    @GeneratedValue
    @Column(name = "ID")
    private long id;

    @ManyToOne
    @JoinColumn(name = "BOOK_ID", nullable = false)
    @Fetch(FetchMode.JOIN)
    private Book book;

    @ManyToOne
    @JoinColumn(name = "B_ID", nullable = false)
    @Fetch(FetchMode.JOIN)
    private B b;

}

@Entity
@Table(name = "B")
public class B {

    @Id
    @GeneratedValue
    @Column(name = "ID")
    private long id;

    @Column(name = "NAME")
    private String name;

}
当我尝试移除一个对象时,我得到了一个“分离实体”的异常,因此我尝试了几种
aDao.remove()
实现方法:

// 1
if(!em.contains(a)){
    a = em.getReference(a.getClass(), a.getId());
}
em.remove(a);

// 2
if(!em.contains(a)){
    a = this.find(a.getId());
}
em.remove(a);

// 3
if(!em.contains(a)){
    a = em.merge(authToRemove);
}
em.remove(a);
上面所有的解决方案都毫无例外地通过了,但实际上并没有从数据库中删除任何内容

有什么问题吗

更新 当我从类A中删除字段b,并且只保留ID和BOOK_ID字段(更改仅在Hibernate类级别,而不是DB表)时,它会按预期删除


感谢

分离的实体将指示没有活动的数据库事务,或者实体的获取和删除发生在两个不同的事务中。这段代码不足以看出哪里出了问题。已更新代码。find()和remove()都发生在同一个函数上。您当然更新了代码,但与事务管理无关……我使用Hibernate根据图书实体的Id查找图书实体,然后删除其所有a对象。当我尝试移除一个对象时。。。这句话对我来说没什么意义,你能详细说明一下你是如何做到的吗?好的,我更新了这个
// 1
if(!em.contains(a)){
    a = em.getReference(a.getClass(), a.getId());
}
em.remove(a);

// 2
if(!em.contains(a)){
    a = this.find(a.getId());
}
em.remove(a);

// 3
if(!em.contains(a)){
    a = em.merge(authToRemove);
}
em.remove(a);