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 をリポジトリまたは同様のものから引き戻します...厄介です!(私はそれをテストしていませんが、うまくいくと思います)-しかし、それは非常に醜いです!