用于JPA回调的Hibernate事件侦听器

如何启用处理JPA回调的Hibernate事件侦听器?

当前,我正在将Hibernate 4与SessionFactory配置一起使用,但是当我保留一个对象时,JPA回调无法正常运行。

任何建议都是最欢迎的。

源代码

package com.esp.entity;

import javax.persistence.Entity;

import javax.persistence.EntityListeners;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.PostLoad;

import javax.persistence.Table;

import com.esp.aaa.TempVal;

@Entity

@EntityListeners(value=TempVal.class)

@Table(name="TEMP")

public class Temp {

private int id;

private String name;

private String email;

private int roll;

@Id @GeneratedValue

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public int getRoll() {

return roll;

}

public void setRoll(int roll) {

this.roll = roll;

}

@PostLoad

public void load(){

System.out.println("post load called here");

}

}

package com.esp.aaa;

import javax.persistence.PrePersist;

public class TempVal {

@PrePersist

public void validate(Object temp){

System.out.println("Object will persist now");

}

}

package com.esp.aaa;

import org.hibernate.Session;

import com.esp.entity.Temp;

import com.esp.utility.HibernateUtils;

public class MainClass {

public static void main(String args[]) {

HibernateUtils.createSessionFactory();

Session session=HibernateUtils.getSessionFactory().getCurrentSession();

session.beginTransaction();

Temp temp=new Temp();

temp.setEmail("abc@gmail.com");

temp.setName("Lucky");

temp.setRoll(1112);

session.save(temp);

System.out.println("Object persist successfully");

session.getTransaction().commit();

HibernateUtils.shutdown();

}

}

<hibernate-configuration>

<session-factory>

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="connection.url">jdbc:mysql://localhost:3306/demo</property>

<property name="connection.username">root</property>

<property name="connection.password">root</property>

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="show_sql">true</property>

<property name="hbm2ddl.auto">update</property>

<property name="hibernate.current_session_context_class">thread</property>

<mapping class="com.esp.entity.Temp"/>

</session-factory>

</hibernate-configuration>

程序输出

程序输出如下:

Hibernate: insert into TEMP (email, name, roll) values (?, ?, ?)

Object persist successfully

预期的输出将是:

Object will persist now

Hibernate: insert into TEMP (email, name, roll) values (?, ?, ?)

Object persist successfully

回答:

这个问题基本上是一样的。

事实证明,这些JPA实体侦听器批注仅在您EntityManager在Hibernate

中使用时才有效(这是可以理解的)。因此,如果要使用这些批注,则应抛弃SessionFactory并使用JPA-complaintEntityManagerEntityManagerFactory

我也推荐这种方法,因为如果您尝试使用JPA批注,那么寻求纯JPA解决方案是合乎逻辑的,而不必将自己束缚于特定于Hibernate的解决方案-即SessionFactory

以上是 用于JPA回调的Hibernate事件侦听器 的全部内容, 来源链接: utcz.com/qa/416397.html

回到顶部