在我的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());
}
}
}
但是现在这个监听器没有被调用。
在Neo4j4中,这个逻辑有替代品吗?举个例子我会非常感激的。感谢
更新
下面描述的配置正在运行,但由于以前保存的实体上的日期为NULL,我的一些测试失败了。。还是出了点问题。。
澄清发现此问题的原因并等待此错误修复后onPreSave()事件期间的修改不会持续到数据库
@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数据发布过程中,您可以自由测试它。
SDN中的事件代码已被弃用,取而代之的是各种机制。第一,SpringData现在支持事务感知事件侦听器。您可以在这里查看如何实现这些功能。第二,您现在可以将Neo4j OGM会话自动连接到您的应用程序中,并利用它的事件功能(请参阅register()方法)。
最后,您可以将这两个概念结合在一起,并通过Spring启动OGM生成的事件!
文档将在我们继续发布时提供,但现在可以自己玩了。