Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 玩保存后模型操作的行为_Java_Hibernate_Events_Callback_Playframework 1.x - Fatal编程技术网

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

Java 玩保存后模型操作的行为,java,hibernate,events,callback,playframework-1.x,Java,Hibernate,Events,Callback,Playframework 1.x,我想实现一种行为,在一些模型保存后在表中插入一行。简而言之,我目前的解决方案是:(这只是我代码的一个示例,所以请不要评论数据库或描述符模型的正确性) 我有一个用于更新/插入实体上插入行为行的侦听器 DescriptionListener.java public class DescriptionListener { @PostPersist public void onPostPersist(Object entity) { Description descr

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

  • 我有一个用于更新/插入实体上插入行为行的侦听器
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();
    }
}
@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;
    }       
}
  • 我有一个用于侦听器的db模型
Description.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();
    }
}
@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
    注释侦听的类上使用实体listner
    
    @实体
    @EntityListeners(DescriptionListener.class)
    @表(name=“Table”)
    公共类表扩展了GenericModel{
    ...
    }
    
    但在我测试了功能后,我在文档中读到了以下文字:
回调方法不能调用EntityManager或查询方法

现在我认为
save()
方法是一种
Query
方法,因此我不能在回调函数中使用(但在我的情况下也是如此),我的问题是:

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

有什么可以帮我玩的吗?


我遵循以下文档:

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

正如您所知,每个实体都扩展了一些类,如;

关于积垢作业;向Play的插件系统广播事件,例如:
JPASupport.objectUpdated

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

然而,我认为您应该遵循hibernate的建议,在新事务中进行更改。在此类生命周期事件之后处理附加的实体总是一个负担。考虑异步并在另一个事务中进行更改