在我的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;
}
};
}
}
答案 0 :(得分:3)
您必须使用Spring Data Neo4j(SDN)4.2.0.M1。这尚未正式发布,但您可以在进行Spring Data Release过程时自由测试。
SDN中的事件代码已被弃用,有利于各种机制。第一,Spring Data现在支持事务感知事件监听器。您可以查看如何实施这些here。 第二,您现在可以将Neo4j OGM会话自动装配到您的应用程序中并利用它的事件功能(请参阅register()方法)。
最后,您可以将这两个概念结合在一起,并通过Spring获取OGM生成的事件!
文档将在我们继续发布时出现,但现在可以自己玩它。