Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果对象基于同一节点属性,则对同一实例的引用_Java_Spring_Neo4j_Spring Data_Spring Data Neo4j - Fatal编程技术网

Java 如果对象基于同一节点属性,则对同一实例的引用

Java 如果对象基于同一节点属性,则对同一实例的引用,java,spring,neo4j,spring-data,spring-data-neo4j,Java,Spring,Neo4j,Spring Data,Spring Data Neo4j,假设我有一个名为Foo的简单类。Foo只有一个字段,一个名为name的字符串 如果我已将Foo类型的对象持久化到数据库,并且我有一个存储库,允许我通过名称或ID在数据库中查找Foo对象,那么是否可以获取对单个实例的引用,以便在下一个示例中: // The Foo node with name "bar" has id 1 Foo foo1 = fooRepository.findOne(1); Foo foo2 = fooRepository.findByName("bar"); foo1和f

假设我有一个名为Foo的简单类。Foo只有一个字段,一个名为name的字符串

如果我已将Foo类型的对象持久化到数据库,并且我有一个存储库,允许我通过名称或ID在数据库中查找Foo对象,那么是否可以获取对单个实例的引用,以便在下一个示例中:

// The Foo node with name "bar" has id 1
Foo foo1 = fooRepository.findOne(1);
Foo foo2 = fooRepository.findByName("bar");
foo1和foo2都引用同一个对象


编辑:我使用的是Spring数据Neo4j 3.2.1。

SDN3中没有实体的客户端缓存

所以你得到了一个新的实例


SDN4中可能会有所不同,不确定。

可能有一种特定于Neo4j的方法,但另一种方法是AOP,它围绕每个返回Foo的方法和将对象返回到singleton的更改……完全取决于fooRepository的行为。它是否每次调用都构造一个新的?维护缓存以便可以重新返回以前找到的实例?在这种情况下,fooRepository是一个扩展GraphRespository的接口,因此findByName是一个派生的查找器方法。这两种方法都是派生的或继承的。我不知道存储库是如何在内部实现的,但我怀疑foo1和foo2不太可能引用同一个对象。它们应该是相等的,但应该是分开的对象。。。但是你为什么需要这种深入的知识呢?@cichystefan:是的,默认情况下,foo1和foo2不会引用同一个对象:在这两种情况下,将创建一个单独的对象来表示相同的数据。我怀疑在这种情况下,由于性能和/或资源使用,用户希望确保重新使用以前实例化的mayhaps重对象。在SDN 4中,他们将引用相同的对象。这仅适用于它们都在同一SDN会话中加载的情况。