0

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

4

1 に答える 1