1

我正在开发一个 Facebook 应用程序,在该应用程序中我使用我的 Facebook 帐户登录,Facebook 将我的 Facebook 数据作为 JSON 返回给我一个 JSON,我将其投影到 User.class(我)中,如下所示:

@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

问题是当我再次登录时,它会创建另一个具有相同属性和 nodeId: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),但我得到了例外。我尝试@Override了 IdGenerator、EntityIdGenerator 等但没有成功。

如果有另一种方法可以保存用户而无需检查它们是否存在并避免重复节点,请告诉我。

4

1 回答 1

1

我认为没有办法手动设置 id。但即使有,您仍然必须检查您的节点是否存在。反正检查一个节点的存在并没有那么昂贵,它只是一个索引检查,所以它应该是 O(log n)。

于 2012-04-10T10:09:36.117 回答