【发布时间】:2015-07-28 14:21:49
【问题描述】:
假设我有一个名为 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 Data Neo4j 3.2.1。
【问题讨论】:
-
可能有一种 Neo4j 特定的方式,但另一种方式是 AOP,它围绕每个返回 Foo 的方法以及将对象返回到单例的更改...
-
完全依赖
fooRepository的行为。每次调用都会构建一个新的吗?维护一个缓存,以便它可以重新返回以前找到的实例? -
在这种情况下,
fooRepository是扩展GraphRepository<Foo>的接口,因此findByName()是派生的查找器方法。这两种方法都是派生或继承的。 -
我不知道存储库是如何在内部实现的,但我怀疑 foo1 和 foo2 不太可能引用同一个对象。它们应该是平等的,而是独立的对象……但是为什么你需要那种深入的知识呢?
-
@cichystefan:是的,默认情况下 foo1 和 foo2 不会引用同一个对象:将创建一个单独的对象来表示两种情况下的相同数据。我怀疑在这种情况下,由于性能和/或资源使用情况,用户希望确保重新使用先前实例化(可能很重)的对象。
标签: java spring neo4j spring-data spring-data-neo4j