gpt4 book ai didi

java - 当 child 被 orphanRemoval 删除时,EntityListener 不起作用

转载 作者:行者123 更新时间:2023-11-29 20:53:02 26 4
gpt4 key购买 nike

我在 JPA 中使用 EntityListener 时遇到问题。

该项目基于:

JPA 2.1。

EclipseLink 2.6.3

MySql 5.7.11

有一个实体作者和书籍,作者与书籍具有 OneToMany 关系,且 oprhanRemoval=true。

如果我得到数据库的作者,我会删除对一本书的引用并保留作者。书已删除,但听众未运行

代码是不言自明的

@Entity
@Table(name = "ges_autor")
public class Author implements Serializable, ItemIf {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;

@OneToMany(mappedBy = "author",cascade = {CascadeType.ALL}, fetch = FetchType.LAZY, orphanRemoval = true)
//@PrivateOwned I have tried it without result
protected List<Book> books;

//getters y setters
}

@Entity
@Table(name = "ges_book")
@EntityListeners({BookListener.class})
public class Book implements Serializable, ItemIf {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;

@ManyToOne
@JoinColumn(name="autor_id")
protected Author author;

//getters y setters
}



public class BookListener {
@PrePersist
private prePersist(Book libro){
System.out.println("Listener libro persist ejecutado");
}
@PreUpdate
private preUpdate(Book libro){
System.out.println("Listener libro update ejecutado");
}
@PreRemove
private preRemove(Book libro){
System.out.println("Listener libro remove ejecutado");
}
}

重现错误:

Author autor = getFacade().find(id);
autor.getLibros().remove(libro);
getEntityManager().merge(autor);

orphanRemoval 正在工作,书籍已被删除,但预删除监听器不起作用

最佳答案

问题的原因是 EclipseLink 实现中的一个错误。按照规定here preremove 方法应该在 orphanRemoval 之后执行,但事实是它没有运行。对此错误的唯一引用是在 eclipse forum 中找到的。 .

我还没有发现官方错误既没有打开解决方案也没有解决方法。我已经决定将所有内容迁移到 Hibernate,但至少我在这里发布了根本原因,以防它对某人有所帮助。

对于可能出现的语法或拼写错误,我们深表歉意。

关于java - 当 child 被 orphanRemoval 删除时,EntityListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37866615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com