gpt4 book ai didi

java - 如何在 Hibernate 4 实体上设置事件监听器?

转载 作者:行者123 更新时间:2023-11-30 09:36:57 24 4
gpt4 key购买 nike

我正在使用 Spring 3.1.0.RELEASE 和 Hibernate 4.0.1.Final。当我的实体 bean 从数据库加载时,我想在它上调用一个事件监听器,但我不知道应该使用什么事件。我像这样在我的 DAO 中加载我的实体

@Repository("eventFeedsDao")
public class EventFeedsDaoImpl implements EventFeedsDao {

...
@Autowired
private SessionFactory sessionFactory;

...

@Override
public EventFeed findById(final Integer id) {
EventFeed eventFeed = null;
final Session session = sessionFactory.getCurrentSession();
final Criteria crit = session.createCriteria(EventFeed.class).add(Restrictions.eq("id", id));
final List<EventFeed> results = crit.list();
if (results != null && results.size() > 0) {
eventFeed = results.get(0);
} // if
return eventFeed;
} // findById

这是我尝试设置事件连接的方式...

@Component
public class HibernateEventWiring {

@Autowired
private SessionFactory sessionFactory;

@Autowired
private EventMavenLoadListener listener;

@PostConstruct
public void registerListeners() {
EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory)
.getServiceRegistry().getService(EventListenerRegistry.class);
registry.getEventListenerGroup(EventType.LOAD).appendListener(listener);
}
}

我的监听类如下...

@Component
public class EventMavenLoadListener implements LoadEventListener {

...

@Override
public void onLoad(final LoadEvent event, final LoadType loadType) throws HibernateException {
if(EventFeed.class.getName().equals(event.getEntityClassName())){
EventFeed entity = (EventFeed) event.getInstanceToLoad();
entity.setNetUtilsService(netUtilsService);
} // if
}

}

但是永远不会调用“onLoad”事件。我究竟做错了什么?我应该使用另一个事件吗?

最佳答案

出于某些我仍然无法理解的原因,EventType.PRE_LOAD 事件类型是可行的方法。这奏效了。

@Component
public class HibernateEventWiring {

@Autowired
private SessionFactory sessionFactory;

@Autowired
private EventMavenLoadListener listener;

@PostConstruct
public void registerListeners() {
final EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory)
.getServiceRegistry().getService(EventListenerRegistry.class);
registry.getEventListenerGroup(EventType.PRE_LOAD)
.appendListener((PreLoadEventListener) listener);
}
}

关于java - 如何在 Hibernate 4 实体上设置事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10602342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com