【发布时间】:2015-11-23 02:53:01
【问题描述】:
我正在使用 Spring Data Neo4j,我有两个实体,Person 和 PhoneNumber。 Person 与 PhoneNumber 具有 1-N 关系。我正在寻找一种始终以特定顺序建立这种关系的方法。
这是我的实体的定义(那些是 Groovy 类):
@NodeEntity
class Person {
@GraphId Long id
String name
@RelatedToVia
Set<NumberRel> numbers
}
@RelationshipEntity(type = "has_number")
class NumberRel {
@GraphId Long id
@StartNode Person person
@EndNode PhoneNumber number
int sequence
}
@NodeEntity
class PhoneNumber {
@GraphId Long id
String number
}
interface PhoneNumberRepository extends GraphRepository<PhoneNumber>, CypherDslRepository<PhoneNumber> {
/* Empty */
}
interface PersonRepository extends GraphRepository<Person>, CypherDslRepository<Person> {
Person findByName(String name)
}
然后我创建并保存一些实体:
def num01 = new PhoneNumber(number: "0101")
phoneNumberRepository.save(num01)
def num02 = new PhoneNumber(number: "0202")
phoneNumberRepository.save(num02)
def alice = new Person(
name: "Alice",
numbers: new LinkedHashSet<NumberRel>()
)
alice.numbers << new NumberRel(
person: alice,
sequence: 10,
number: num01
)
alice.numbers << new NumberRel(
person: alice,
sequence: 20,
number: num02
);
personRepository.save(alice)
这就是我卡住的地方:我想告诉 Spring - 或 Neo4j - 加载按 sequence 属性的值排序的 NumberRel 关系。我找不到这样做的方法。
现在,顺序是随机的。以下代码证明了这一点:
(1..3).each {
println "Looking for Alice, pass ${it}"
def p = personRepository.findByName("Alice")
p.numbers.each { number ->
print "${number.sequence} "
}
println()
}
产生这个输出:
Looking for Alice, pass 1
10 20
Looking for Alice, pass 2
20 10
Looking for Alice, pass 3
10 20
所以我的问题是:有没有办法让 Person.numbers 按 NumberRel.sequence 排序?
【问题讨论】:
标签: spring neo4j spring-data spring-data-neo4j