2012-04-09 7 views
1

は、私は私が私のFacebookのアカウントでログインし、Facebookが私はそうのようなUser.class(私)に突出JSONのウィッヒとしての私のFacebookのデータを私にJSONを返すにFacebookアプリを開発しています:ノードの作成時に手動でneo4jグラフのnodeIdを設定できますか?

@NodeEntity public class User{ @GraphId Long NodeId; String facebook_id; String facebook_name; } 

template.save(me); これは2つのプロパティを持つグラフにノードを作成します。例:facebook_id="1000023453464"name="John Smith"で、nodeIdはneo4jによって自動的に設定されます。例nodeId:1。 問題は、再度ログインすると同じプロパティとnodeId:2を持つ別のノードが作成されることです。

私はそうのようなグラフにそれを保存する前にユーザーが出回っグラフに存在するかどうかをチェックすることでこれを回避:、

User retrieved_user = userRepository.findByFacebook_id(me.getFacebook_id()); 
if(retrieved_user != null) { me.setNodeId(retrieved_user.getNodeId()); } 

、私がログインするたびに、それが複製ノードを作成しません、それを既存のノードのプロパティを更新するだけです。

これは私が探しているものではありません。なぜなら、友達リストなど、他のダーラをインポートすると、作成するノードが約1000個になる可能性があるからです。データベースを保存する前に

私のポイントは:私は手動でノードの前に問題を解決し、ノードにグラフが存在するかどうかを確認する必要はありません。だから、これが実現可能なら、私はそれを達成するのを手伝ってください。私は例えばsetHighId(215431323)を試しましたが、例外があります。私は@OverrideにIdGenerator、EntityIdGeneratorなどを試みましたが、成功しませんでした。

ユーザーが存在するかどうかを確認せずにノードを重複して使用しないで保存できる別の方法がある場合は、教えてください。
ありがとう

+0

ここで答えます:https://github.com/SpringSource/spring-data-neo4j/issues/36#issuecomment-5055184 –

答えて

1

私は手動でIDを設定する方法はないと思います。しかし、存在したとしても、ノードが存在するかどうかを確認する必要がありました。とにかくノードの存在を確認することはそれほど費用がかからない、単なるインデックスチェックなので、O(log n)にする必要があります。

関連する問題