使用 SDN 2.1.0.BUILD-SNAPSHOT
是否有执行 getOrCreate 的域级线程安全方式?
我有
@NodeEntity
public class ResourceEntity extends Entity {
@Fetch
@Indexed(unique=true)
String url;
@Fetch
String platform;
}
我想要的是能够访问neo4j REST数据库,并添加一个新的ResourceEntity,或者已经在那里检索一个,如果已经有一个具有指定url字段的...
我找不到的是一种以原子方式执行此操作的方法。它需要以原子方式工作,因为将有多个线程调用此代码。
neo4jTemplate.save(resourceEntity);
如果我尝试插入具有重复键的 ResourceEntity,则抛出(应该如此) org.springframework.dao.DataIntegrityViolationException,但在域级别的 Neo4jTemplate 上未公开的是 getOrCreate,这正是我想要的。我如何在SDN中实现这一点而不必做一些不整洁的事情
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("url", url);
properties.put("__type__", "com.mydomain.analysis.thingie.dao.ResourceEntity");
Node node = neo4jTemplate.getOrCreateNode("ResourceEntity", "url", "url", properties);
...然后从存储库或类似的东西中拉回新的 ResourceEntity ......讨厌!(我没有测试过,但我认为这会起作用) - 但它非常难看!