首页 > 解决方案 > 玩!保存模型操作后的行为

问题描述

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

描述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;
    }       
}

回调方法不得调用 EntityManager 或 Query 方法!

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

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

在 Play 中有什么可以帮助我的吗?

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

标签: javahibernateeventscallbackplayframework-1.x

解决方案


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

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

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

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

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


推荐阅读