gpt4 book ai didi

neo4j - Spring Data Neo4 - 已弃用 BeforeSaveEvent

转载 作者:行者123 更新时间:2023-12-01 19:44:16 25 4
gpt4 key购买 nike

在我的 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 中有这个逻辑的替代品吗?我真的很感激一个例子。谢谢

已更新

下面描述的配置正在工作,但我的一些测试失败了,因为先前保存的实体上的日期为空。仍然有问题。

澄清后找到此问题的原因并等待此错误修复 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;
}

};
}

}

最佳答案

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

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

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

随着我们继续发布,文档将会发布,但现在您可以随意尝试一下。

关于neo4j - Spring Data Neo4 - 已弃用 BeforeSaveEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38742337/

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