Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠插入后事件触发器两次_Java_Hibernate_Event Listener - Fatal编程技术网

Java 休眠插入后事件触发器两次

Java 休眠插入后事件触发器两次,java,hibernate,event-listener,Java,Hibernate,Event Listener,我刚刚为我的JavaSpringHibernateMySQL服务器实现了一个插入后事件监听器。我想做的是——每次创建一个特定类型的新对象时,我想在其上创建一系列统计数据。有点随意,但客户想要最奇怪的东西。我不希望任何未来的编码人员意外地把这件事搞砸,所以我想一个插入后的监听器会帮我做到这一点 以下是我的应用程序上下文条目: <property name="eventListeners"> <map> <entry>

我刚刚为我的JavaSpringHibernateMySQL服务器实现了一个插入后事件监听器。我想做的是——每次创建一个特定类型的新对象时,我想在其上创建一系列统计数据。有点随意,但客户想要最奇怪的东西。我不希望任何未来的编码人员意外地把这件事搞砸,所以我想一个插入后的监听器会帮我做到这一点

以下是我的应用程序上下文条目:

<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);
    }
}