gpt4 book ai didi

java - 是否可以在 @Pre/PostPersist 监听器中保留新实体?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:00:48 26 4
gpt4 key购买 nike

我正在尝试设置我的 hibernate 应用程序以在每次创建 Activity 实体时都保留一个新的 Notification 实体 - 目前,我已经尝试了 通知只是无法静默地持续存在(日志中没有错误,但永远不会执行sql)。

谁能确认甚至可以在 Hibernate pre/postPersist 监听器中持久化其他实体?

我已阅读文档:

A callback method must not invoke EntityManager or Query methods!

但我已经阅读了其他几个似乎表明这是可能的讨论主题。

作为引用,我尝试过的两种方法是:

  1. @PrePersist 方法 - 在 ActivityNotification 之间设置一个 cascade.ALL 关系,并在 PrePersist 方法中简单地创建一个新的 Notification 并将其链接到正在创建的 Activity,以期保留 Notification

  2. @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 .更准确地说,您必须链接 NotificationActivity在坚持之前Activity为了 cascade={CascadeType.PERSIST}去工作。

关于java - 是否可以在 @Pre/PostPersist 监听器中保留新实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639131/

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