当前位置: 首页 > 面试题库 >

在自动触发的默认监听器之前触发Hibernate自定义事件监听器

顾超
2023-03-14
问题内容

我做了一个自定义的Hibernate
Event监听器,扩展了org.hibernate.event.PreInsertEventListener。自定义侦听器会覆盖onPreInsert方法并设置“联系人”实体的字段,然后再使用DAO将其保存在数据库中。

问题是,在侦听器为其提供值之前该字段为null,并且默认的hibernate事件侦听器在我的自定义侦听器之前自动触发。当他们检查ddl时,他们会看到字段上的非null约束,并在允许我的自定义事件侦听器为字段提供值之前抛出null检查异常。(使用spring
AOP代替hibernate自定义监听器时会发生同样的问题:默认的hibernate监听器在我的Aspect方法之前执行)

因此,可以知道我使用spring session factory来调整hibernate侦听器的触发顺序。

谢谢


问题答案:

我有一个为您创建人实体数据历史的示例。希望能帮助到你。

我必须建立一个 辅助界面

public interface DataHistoryAware {

    public DataHistory getDataHistory();

    public void setDataHistory(DataHistory dataHistory);
}

这是 侦听器的实现

public class DataHistoryListener {
   @PrePersist
    public void setCreateDataHistory(DataHistoryAware model) {
        //set creationDate
        DataHistory dataHistory = model.getDataHistory() == null ? new DataHistory() : model.getDataHistory();
        dataHistory.setCreationDate(new Date());
        model.setDataHistory(dataHistory); 
    }
@PostUpdate
    public void setUpdateDataHistory(DataHistoryAware model) {
        DataHistory dataHistory = model.getDataHistory() == null ? new DataHistory() : model.getDataHistory();
        dataHistory.setLastModificationDate(new Date());
        model.setDataHistory(dataHistory);
    }
}

人士实体

@Entity
@EntityListeners(DataHistoryListener.class)
@Table(name="person")
public class Person implements Serializable, DataHistoryAware {

@Column(name = "full_name", length = 255, nullable = false)
    private String fullName;

@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "data_history_id", nullable = false)
private DataHistory dataHistory;

public String getFullName() {
        return this.fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
public DataHistory getDataHistory() {
        return dataHistory;
    }

    public void setDataHistory(DataHistory dataHistory) {
        this.dataHistory = dataHistory;
    }
}

此实现在持久之前为人实体创建数据历史记录,并在合并之前对其进行更新。datahistory属性具有非空约束,因此这与联系人实体的非空属性的问题相同。希望它有用。



 类似资料:
  • 问题内容: 我想知道是否有人可以帮助我理解如何准确地创建不同的自定义事件侦听器。 我没有事件的具体案例,但我想大致了解它是如何完成的,因此可以将其应用于需要的地方。 我想做的是,以防万一有些人可能需要知道的是: 问题答案: var evt = document.createEvent(“Event”); evt.initEvent(“myEvent”,true,true);

  • 问题内容: 假设我想为自己的班级创建自己的事件监听器,该怎么做?我需要手动维护线程吗? 问题答案: 创建一个将由您的活动实现的接口: 现在,您需要知道事件实际发生的时间。例如,当用户触摸屏幕上的一个点时,重写onTouchEvent方法: 同样,您可以创建所需的特定事件。(示例可能是按下,等待2秒钟然后松开-您需要在touch事件中执行一些逻辑操作)。 在您的活动中,可以使用customView对

  • 当事情发生在课堂上时,事件会被触发。 例如,在单击按钮时或在呈现元素之前/之后。 写事件的方法 使用侦听器的内置事件 Attaching events later 自定义活动 使用监听器的内置事件 Ext JS提供了侦听器属性,用于在Ext JS文件中编写事件和自定义事件。 Writing listener in Ext JS 我们将通过向面板添加listen属性来在前一个程序中添加监听器。 <!

  • 本文向大家介绍nodejs事件的监听与触发的理解分析,包括了nodejs事件的监听与触发的理解分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了nodejs事件的监听与触发。分享给大家供大家参考。具体分析如下: 关于nodejs的事件驱动,看了《nodejs深入浅出》还是没看明白(可能写的有点深,或者自己理解能力不够好),今日在图灵社区看到一篇关于nodejs事件的监听与触发,由于给出的

  • 问题内容: 我想创建自己的Button类,该类将具有Sprite,并且每当我触摸它时,它将成长或旋转,等等,该类还将具有Draw和Update函数。 要检查我是否触摸它,我可以检查子画面矩形是否包含屏幕类的touchdown和touchup方法中触摸的位置。 我不想这样做,我想做一些类似android button click listener的事情,这可能吗? 就像是 有可能吗 问题答案: 当然

  • 应用事件监听器是实现一个或多个 Servlet 事件监听器接口的类。它们是在部署 Web 应用时,实例化并注册到 Web 容器中。它们由开发人员在WAR 包中提供。 Servlet 事件监听器支持在 ServletContext、HttpSession 和ServletRequest 状态改变时进行事件通知。Servlet 上下文监听器是用来管理应用的资源或 JVM 级别持有的状态。HTTP 会话