【问题标题】:Play! Behavior for after save model operation玩!保存模型操作后的行为
【发布时间】:2018-05-08 08:47:07
【问题描述】:

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

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

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 { ... } 但是在我测试了功能后,我在文档中读到了这个词:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多