玩!保存后模型操作的行为



我想实现一种在某些模型保存后在表中插入行的行为。简而言之,我当前的解决方案是这样的:(这只是我的代码的一个例子,所以请不要评论数据库或描述符模型的正确性)。

  • 我有一个侦听器,用于更新/插入实体上的插入行为行

描述侦听器.java

public class DescriptionListener {
@PostPersist
public void onPostPersist(Object entity) {
Description description = new Description("INSERT");
description.save();
}
@PostUpdate
public void onPostUpdate(Object entity) {
Description description = new Description("UPDATE");
description.save();
}
}
  • 我有一个侦听器的数据库模型

说明.java

@Entity
@Table(name="DESCRIPTION")
public class Description extends GenericModel {
@Id
@GeneratedValue
@Column(name="ID")
public Long id;
@Column(name="INFO")
public String info;
public Description(String info) {
this.info = info;
}       
}
  • 我在我想听的带有@EntityListener注释的类上使用实体列表器 @Entity @EntityListeners(DescriptionListener .class) @Table(name="TABLE") public class Table extends GenericModel { ... } 但是在我测试功能后,我在文档中读到了这句话:

回调方法不得调用实体管理器或查询方法!

现在我认为save()方法是一种Query方法,所以我不能在回调函数中使用(但它在我的情况下工作原理相同),我的问题是:

如何实现相同类型的行为并在保存另一个模型后保存另一个模型?

有什么可以帮助我玩的吗?

我遵循以下文档:实体侦听器和回调方法

Play的JPA支持在字节码增强和JPAPlugin的帮助下实现

同样如您所知,每个实体都扩展了一些类,例如;JPABase.java

关于 CRUD 操作;JPABase向 Play 的插件系统广播一个事件,例如:JPASupport.objectUpdated

因此,您可以编写自定义 PlayPlugin 来捕获这些事件并进行一些其他更改。

但是恕我直言,您应该遵循休眠的建议并在新事务中进行更改。在这些生命周期事件之后使用附加实体始终是一种负担。异步思考并在另一个事务中进行更改。

最新更新