【问题标题】:Spring Data Neo4j : relationship in specific orderSpring Data Neo4j:特定顺序的关系
【发布时间】:2015-11-23 02:53:01
【问题描述】:

我正在使用 Spring Data Neo4j,我有两个实体,PersonPhoneNumberPersonPhoneNumber 具有 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


    【解决方案1】:

    如果SDN不能对结果进行排序,先将集合送入排序-

    (1..3).each {
        println "Looking for Alice, pass ${it}"
        def p = personRepository.findByName("Alice")
        p.numbers.sort{it.sequence}
        p.numbers.each { number ->
            print "${number.sequence} "
        }
        println()
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      相关资源
      最近更新 更多