Spring Data Neo4 - 不推荐使用BeforeSaveEvent

时间:2016-08-03 11:30:32

标签: neo4j spring-data-neo4j spring-data-neo4j-4 neo4j-ogm

在我的Spring Data Neo4j 4项目中 - 不推荐使用BeforeSaveEvent类。

此外,之前我使用以下代码为我的实体设置创建/更新日期:

@EventListener
public void handleBeforeSaveEvent(BeforeSaveEvent event) {
    Object entity = event.getEntity();
    if (entity instanceof BaseEntity) {
        BaseEntity baseEntity = (BaseEntity) entity;
        if (baseEntity.getCreateDate() == null) {
            baseEntity.setCreateDate(new Date());
        } else {
            baseEntity.setUpdateDate(new Date());
        }
    }
}

但是现在没有调用这个监听器。

Neo4j 4中是否有替换此逻辑?我真的很感激一个例子。感谢

已更新

下面描述的配置正在运行,但由于以前保存的实体上的NULL日期,我的一些测试失败了......有些事情仍然是错误的。

澄清后发现此问题的原因并等待此修正 Modifications during a onPreSave() event do not persist to the database

@Configuration
@EnableExperimentalNeo4jRepositories(basePackages = "com.example")
@EnableTransactionManagement
public class Neo4jTestConfig {

    @Bean
    public Neo4jTransactionManager transactionManager() throws Exception {
        return new Neo4jTransactionManager(sessionFactory());
    }

    @Bean
    public SessionFactory sessionFactory() {
        return new SessionFactory("com.example") {

            @Override
            public Session openSession() {
                Session session = super.openSession();

                session.register(new EventListenerAdapter() {

                    @Override
                    public void onPreSave(Event event) {
                        Object eventObject = event.getObject();
                        if(eventObject instanceof BaseEntity) {
                            BaseEntity baseEntity = (BaseEntity) eventObject;
                            if (baseEntity.getCreateDate() == null) {
                                baseEntity.setCreateDate(new Date());
                            } else {
                                baseEntity.setUpdateDate(new Date());
                            }
                        }
                    }

                });

                return session;
            }

        };
    }

}

1 个答案:

答案 0 :(得分:3)

您必须使用Spring Data Neo4j(SDN)4.2.0.M1。这尚未正式发布,但您可以在进行Spring Data Release过程时自由测试。

SDN中的事件代码已被弃用,有利于各种机制。第一,Spring Data现在支持事务感知事件监听器。您可以查看如何实施这些here。 第二,您现在可以将Neo4j OGM会话自动装配到您的应用程序中并利用它的事件功能(请参阅register()方法)。

最后,您可以将这两个概念结合在一起,并通过Spring获取OGM生成的事件!

文档将在我们继续发布时出现,但现在可以自己玩它。