java - 玩!保存模型操作后的行为
问题描述
我想实现在某些模型保存后在表中插入一行的行为。简而言之,我目前的解决方案是:(这只是我的代码示例,因此请不要评论数据库或描述符模型的正确性)。
- 我有一个侦听器,用于在更新/插入实体上插入行为行
描述Listener.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 { ... }
但是在我测试了功能后,我在文档中读到了这个词:
回调方法不得调用 EntityManager 或 Query 方法!
现在我认为该save()
方法是一种Query
方法,因此我不能在回调函数中使用(但在我的情况下它的工作原理相同),我的问题是:
如何在保存另一个模型后实现相同类型的行为并保存模型?
在 Play 中有什么可以帮助我的吗?
我遵循此文档:实体侦听器和回调方法
解决方案
Play 的 JPA 支持在字节码增强和 JPAPlugin 的帮助下实现
同样如您所知,每个实体都扩展了一些类,例如;
JPABase.java
关于 CRUD 操作;JPABase
向 Play 的插件系统广播事件,例如:JPASupport.objectUpdated
.
因此,您可以编写一个自定义 PlayPlugin 来捕获这些事件并进行一些其他更改。
但是恕我直言,您应该遵循休眠的建议并在新事务中进行更改。在这些生命周期事件之后使用附加实体总是一种负担。考虑异步并在另一个事务中进行更改。
推荐阅读
- javascript - 我有代码,基于该代码我需要解决问题 - JS
- amazon-web-services - 目标组没有关联的负载均衡器
- php - array_push 不会在 PHP 中向数组中添加元素
- reactjs - 提供给“组件”的无效道具“源”
- java - 如何在java中使用objectMapper读取带有数据的json并进行处理
- node.js - 无法解析“node_modules/natives”中的“模块”
- python - python 3 typeError:'NoneType'对象不可迭代
- imagemagick - Imagick 自动裁剪透明区域导致尺寸错误
- lua - Lua 实现的是什么牌子的协程?
- html - 在 html 模板中找不到自定义模板函数