Java 休眠插入后事件触发器两次
我刚刚为我的JavaSpringHibernateMySQL服务器实现了一个插入后事件监听器。我想做的是——每次创建一个特定类型的新对象时,我想在其上创建一系列统计数据。有点随意,但客户想要最奇怪的东西。我不希望任何未来的编码人员意外地把这件事搞砸,所以我想一个插入后的监听器会帮我做到这一点 以下是我的应用程序上下文条目:Java 休眠插入后事件触发器两次,java,hibernate,event-listener,Java,Hibernate,Event Listener,我刚刚为我的JavaSpringHibernateMySQL服务器实现了一个插入后事件监听器。我想做的是——每次创建一个特定类型的新对象时,我想在其上创建一系列统计数据。有点随意,但客户想要最奇怪的东西。我不希望任何未来的编码人员意外地把这件事搞砸,所以我想一个插入后的监听器会帮我做到这一点 以下是我的应用程序上下文条目: <property name="eventListeners"> <map> <entry>
<property name="eventListeners">
<map>
<entry>
<key>
<value>post-insert</value>
</key>
<list>
<bean class="xxx.MyPostInsertEventListener" />
</list>
</entry>
</map>
</property>
}
但我的问题是:它会出现两次。我正在调用此saveOrUpdate方法来持久化该对象:
protected void saveOrUpdate(final Domain domain) {
final List<Domain> domains = new ArrayList<Domain>();
domains.add(domain);
saveOrUpdateAll(domains);
}
protected void saveOrUpdateAll(final Collection<? extends Domain> domains) {
if (domains != null) {
for (final Domain domain : domains) {
if (domain.getId() != null) {
domain.setModifiedDate(new Date());
} else {
domain.setCreatedDate(new Date());
}
}
getHibernateTemplate().saveOrUpdateAll(domains);
}
}
受保护的void saveOrUpdate(最终域){
最终列表域=新的ArrayList();
域。添加(域);
saveOrUpdateAll(域);
}
受保护的void saveOrUpdateAll(最终收集)您是否检查了侦听器未录制两次?(您可以通过在hibernate代码中进行逐步调试来检查这一点……在某个时刻,您将看到hibernate在侦听器数组上迭代,检查此数组以查看其中是否没有MyPostInsertListener的2个实例。-在PostInsert方法中放置一个断点以快速找到hibernate侦听器数组-宾果。谢谢!侦听器另外一个开发人员在另一个我错过的位置添加了用于lucene索引的侦听器。
protected void saveOrUpdate(final Domain domain) {
final List<Domain> domains = new ArrayList<Domain>();
domains.add(domain);
saveOrUpdateAll(domains);
}
protected void saveOrUpdateAll(final Collection<? extends Domain> domains) {
if (domains != null) {
for (final Domain domain : domains) {
if (domain.getId() != null) {
domain.setModifiedDate(new Date());
} else {
domain.setCreatedDate(new Date());
}
}
getHibernateTemplate().saveOrUpdateAll(domains);
}
}