Hibernate监听实现
自定义监听器
实现 PostCommitDeleteEventListener, PostCommitInsertEventListener, PostCommitUpdateEventListener
package com.hibernate.demo.hibernate;
import org.hibernate.event.spi.*;
import org.hibernate.persister.entity.EntityPersister;
public class HibernateListener implements PostCommitDeleteEventListener, PostCommitInsertEventListener, PostCommitUpdateEventListener {
@Override
public void onPostDeleteCommitFailed(PostDeleteEvent postDeleteEvent) {
}
@Override
public void onPostInsertCommitFailed(PostInsertEvent postInsertEvent) {
}
@Override
public void onPostUpdateCommitFailed(PostUpdateEvent postUpdateEvent) {
}
@Override
public void onPostDelete(PostDeleteEvent postDeleteEvent) {
System.out.println("delete");
}
@Override
public void onPostInsert(PostInsertEvent postInsertEvent) {
System.out.println("insert");
}
@Override
public void onPostUpdate(PostUpdateEvent postUpdateEvent) {
System.out.println("update");
}
@Override
public boolean requiresPostCommitHanding(EntityPersister entityPersister) {
return true;
}
@Override
public boolean requiresPostCommitHandling(EntityPersister persister) {
return true;
}
}
创建sessionFactory工厂时注册监听器
@Component
public class HibernateSessionFactory {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService(
EventListenerRegistry.class);
registry.getEventListenerGroup(EventType.POST_COMMIT_INSERT).appendListener(new HibernateListener());//对实体保存的监听
registry.getEventListenerGroup(EventType.POST_COMMIT_UPDATE).appendListener(new HibernateListener());//对实体修改的监听
registry.getEventListenerGroup(EventType.POST_COMMIT_DELETE).appendListener(new HibernateListener());//对实体删除的监听
}
return sessionFactory;
}
@PostConstruct
public static Session init(){
return getSessionFactory().openSession();
}
}
使用
@RestController
public class TblogController {
@Resource
private Dao dao;
@GetMapping("index")
public String index(String author) {
dao.updateBlog(author);
return "";
}
}
public void updateBlog(String author) {
Session session = HibernateSessionFactory.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
Query query = session.createQuery("from TBlog where id = :id");
query.setParameter("id",4);
List list = query.list();
if (null != list && list.size() > 0 ){
TBlog tBlog = (TBlog) list.get(0);
tBlog.setAuthor(author);
session.save(tBlog);
}
transaction.commit();
session.close();
}