0
我使用Spring Data Neo4j,我有两个实体,Person
和PhoneNumber
。 Person
与PhoneNumber
有1-N的关系。我正在寻找一种以特定顺序始终保持这种关系的方式。Spring Data Neo4j:按特定顺序关系
这里是我的实体的定义(这些都是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关系。我找不到这样做的方法。
现在,订单是随机的。下面的代码prooves它:
(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订购的方式?