玩!保存模型操作后的行为
Play! Behavior for after save model operation
我想实现一种行为,即在某些模型保存后在 table 中插入一行。简而言之,我当前的解决方案是:(这只是我的代码示例,因此请不要评论数据库或描述符模型的正确性)。
- 我有一个用于在 update/insert 实体上插入行为行的侦听器
DescriptionListener.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();
}
}
- 我有一个监听器的数据库模型
Description.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;
}
}
- 我在 class 上使用实体监听器,我想用
@EntityListener
注释监听
@Entity
@EntityListeners(DescriptionListener .class)
@Table(name="TABLE")
public class Table extends GenericModel {
...
}
但是在我测试了功能之后,我在文档中读到了这个词:
A callback method must not invoke EntityManager or Query methods!
现在我认为 save()
方法是一个 Query
方法,所以我不能在回调函数中使用(但它在我的情况下是一样的)我的问题是:
如何实现相同类型的行为并在保存另一个模型后保存一个模型?
有什么可以帮助我玩游戏的吗?
Play 的 JPA 支持在字节码增强和 JPAPlugin 的帮助下实现
另外,如您所知,每个实体都扩展了一些 类;
JPABase.java
关于CRUD操作; JPABase
向 Play 的插件系统广播事件,例如:JPASupport.objectUpdated
。
因此您可以编写自定义 PlayPlugin 来捕获这些事件并进行一些其他更改。
但是恕我直言,您应该遵循休眠的建议并在新事务中进行更改。在这些生命周期事件之后玩附加实体总是一种负担。考虑异步并在另一个事务中进行更改。
我想实现一种行为,即在某些模型保存后在 table 中插入一行。简而言之,我当前的解决方案是:(这只是我的代码示例,因此请不要评论数据库或描述符模型的正确性)。
- 我有一个用于在 update/insert 实体上插入行为行的侦听器
DescriptionListener.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();
}
}
- 我有一个监听器的数据库模型
Description.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;
}
}
- 我在 class 上使用实体监听器,我想用
@EntityListener
注释监听@Entity @EntityListeners(DescriptionListener .class) @Table(name="TABLE") public class Table extends GenericModel { ... }
但是在我测试了功能之后,我在文档中读到了这个词:
A callback method must not invoke EntityManager or Query methods!
现在我认为 save()
方法是一个 Query
方法,所以我不能在回调函数中使用(但它在我的情况下是一样的)我的问题是:
如何实现相同类型的行为并在保存另一个模型后保存一个模型?
有什么可以帮助我玩游戏的吗?
Play 的 JPA 支持在字节码增强和 JPAPlugin 的帮助下实现
另外,如您所知,每个实体都扩展了一些 类;
JPABase.java
关于CRUD操作; JPABase
向 Play 的插件系统广播事件,例如:JPASupport.objectUpdated
。
因此您可以编写自定义 PlayPlugin 来捕获这些事件并进行一些其他更改。
但是恕我直言,您应该遵循休眠的建议并在新事务中进行更改。在这些生命周期事件之后玩附加实体总是一种负担。考虑异步并在另一个事务中进行更改。