1

私は Facebook アカウントでログインする Facebook アプリを開発しています。Facebook は、Facebook データを含む JSON を JSON として返し、User.class (me) に次のように投影します。

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

次に、template.save(me); これを実行して、2 つのプロパティを持つグラフにノードを作成します: Example:facebook_id="1000023453464"name="John Smith"nodeId は neo4j: Example によって自動的に設定されますnodeId:1

問題は、再度ログインすると、同じプロパティと no​​deId:2 を持つ別のノードが作成されることです。

次のようにグラフに保存する前に、ユーザーがグラフに既に存在するかどうかを確認することで、これを回避しました。

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

現在、ログインするたびに、重複するノードは作成されず、既存のノードのプロパティが更新されるだけです。

しかし、これは私が探しているものではありません。作成するノードが約 1000 になる可能性のある友人のリストなどの他のデータをインポートするときに、アプリがデータベース内の個々のノードの存在を事前にチェックしないようにするためです。保存します。

私のポイントはtemplate.save(me)、問題が解決される前に nodeId を手動で設定できる方法があれば、グラフにノードが存在するかどうかをアプリで確認する必要がなくなるということです。これが実行可能な場合は、それを達成するのを手伝ってください。たとえば を試しましたsetHighId(215431323)が、例外が発生します。@OverrideIdGenerator、EntityIdGenerator などを試しましたが、成功しませんでした。

ユーザーが存在するかどうかを確認せずにユーザーを保存し、ノードの重複を回避できる別の方法がある場合は、お知らせください。

4

1 に答える 1

1

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

于 2012-04-10T10:09:36.117 に答える