我正在尝试设置我的 hibernate 应用程序以在每次创建 Activity
实体时都保留一个新的 Notification
实体 - 目前,我已经尝试了 通知
只是无法静默地持续存在(日志中没有错误,但永远不会执行sql)。
谁能确认甚至可以在 Hibernate pre/postPersist 监听器中持久化其他实体?
我已阅读文档:
A callback method must not invoke EntityManager or Query methods!
但我已经阅读了其他几个似乎表明这是可能的讨论主题。
作为引用,我尝试过的两种方法是:
@PrePersist
方法 - 在Activity
和Notification
之间设置一个 cascade.ALL 关系,并在 PrePersist 方法中简单地创建一个新的Notification
并将其链接到正在创建的Activity
,以期保留Notification
。@PostPersist
方法 - 使用@Configurable
和一个 ListenerClass,在服务中连接并创建一个新的Notification
实体,然后显式调用 entityManger 持久化
有人可以确认我正在尝试的是可能的吗?
最佳答案
为什么要坚持Notification
在 @PrePersist
或 @PostPersist
功能?以下代码应保留两个实体:
@Entity
public class Activity implements Serializable {
@OneToOne(cascade={CascadeType.PERSIST})
private Notification notification;
}
@Entity
public class Notification implements Serializable { }
@Stateless
public class MrBean implements MrBeanInterface {
@PersistenceContext()
private EntityManager em;
public void persistActivity() {
Activity act = new Activity();
act.setNotification(new Notification());
em.persist(act);
}
}
更新:您可以尝试在 Activity 的构造函数中创建链接,如下所示:
@Entity
public class Activity implements Serializable {
@OneToOne(cascade={CascadeType.PERSIST})
private Notification notification;
public Activity() {
this.notification = new Notification();
}
}
@Entity
public class Notification implements Serializable { }
@Stateless
public class MrBean implements MrBeanInterface {
@PersistenceContext()
private EntityManager em;
public void persistActivity() {
Activity act = new Activity();
em.persist(act);
}
}
要注意的一件事是我认为你不能使用 @PostPersist
.更准确地说,您必须链接 Notification
至 Activity
在坚持之前Activity
为了 cascade={CascadeType.PERSIST}
去工作。
关于java - 是否可以在 @Pre/PostPersist 监听器中保留新实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639131/