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

时间:2018-05-08 08:47:08

标签: java hibernate events callback playframework-1.x

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

  • 我在update / insert entity
  • 上有一个插入行为行的监听器

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;
    }       
}
  • 我在课堂上使用实体列表器,我希望用@EntityListener注释来听 @Entity @EntityListeners(DescriptionListener .class) @Table(name="TABLE") public class Table extends GenericModel { ... } 但在我测试功能后,我在doc:
  • 中读到了这些单词
  

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

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

如何在保存其他模型后实现相同类型的行为并保存模型?

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

我遵循此文档:Entity listeners and Callback methods

1 个答案:

答案 0 :(得分:1)

借助字节码增强和JPAPlugin实现Play的JPA支持

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

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

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

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