Neo4j Spring数据Neo4-BeforeSaveEvent已弃用

Neo4j Spring数据Neo4-BeforeSaveEvent已弃用,neo4j,spring-data-neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Spring Data Neo4j,Spring Data Neo4j 4,Neo4j Ogm,在我的SpringDataNeo4J4项目中-BeforeSaveEvent类被弃用 此外,之前我使用了以下代码来设置实体的创建/更新日期: @EventListener public void handleBeforeSaveEvent(BeforeSaveEvent event) { Object entity = event.getEntity(); if (entity instanceof BaseEntity) { BaseEntity baseEnt

在我的SpringDataNeo4J4项目中-
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中是否有此逻辑的替代品?我真的很想举个例子。谢谢

已更新

下面描述的配置正在运行,但我的一些测试失败,因为以前保存的实体上的日期为空。。还是有点不对劲

澄清后发现此问题的原因并等待此错误修复


您必须使用弹簧数据Neo4j(SDN)4.2.0.M1。这还没有正式发布,但您可以在Spring数据发布过程中自由测试它

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

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


文档将在我们继续发布时提供,但现在您可以自己使用它。

我仍然找不到有效的解决方案。。我的测试因问题中的配置而失败。由于某些原因,使用这种方法无法正确保存日期。面对同样的问题…我在这里找到了答案,这就是我们目前所做的(始终通过Neo4jTemplate而不是GraphRespository更新图形实体)。如果使用该模板,将触发“保存前”事件。我知道这不是一个理想的解决方案,但在你找到更好的选择之前,也许可以帮助你。@troig,谢谢!我将会话与SDN存储库混合使用。。所以看起来这不是一个选项,尤其是在存储库的情况下。是的,我知道这不是一个很好的选项…中有一个开放的问题,也许你可以看看那里,并得到一些反馈。
@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;
            }

        };
    }

}