2016-05-24 3 views
1

Я двигаюсь от SDN 3 до SDN 4 и от Neo4j 2.3 до 3.0.1Spring Data Neo4j 4 Метод Repository возвращает 1 элемент

На новых зависимостей мой тест завершается с утверждением. Вместо 3 узлов он возвращает только один.

@NodeEntity 
public class Decision extends Commentable { 

    private final static String CONTAINS = "CONTAINS"; 
    private final static String DEFINED_BY = "DEFINED_BY"; 
    private final static String VOTED_FOR = "VOTED_FOR"; 

    private String name; 

    @Relationship(type = DEFINED_BY, direction = Relationship.INCOMING) 
    private Set<Criterion> criteria = new HashSet<>(); 

.... 


@NodeEntity 
public class Criterion extends Authorable { 

    private final static String CONTAINS = "CONTAINS"; 
    private final static String DEFINED_BY = "DEFINED_BY"; 

    private String name; 

    private String description; 

    @Relationship(type = CONTAINS, direction = Relationship.INCOMING) 
    private CriterionGroup group; 

    @Relationship(type = DEFINED_BY, direction = Relationship.OUTGOING) 
    private Decision owner; 


@Test 
    public void testGetChildDecisionsSortedBySumOfCriteriaAvgVotesWeightWithCoefficients() { 
     User user = userService.createUser("test", "test", "[email protected]", null, null); 

     final Decision rootDecision1 = decisionDao.create("Root decision1", "Root decision 1 description", null, user); 

     final Criterion rootDecision1Criterion1 = criterionDao.create("rootDecision1Criterion1", "rootDecision1Criterion1", rootDecision1, user); 
     final Criterion rootDecision1Criterion2 = criterionDao.create("rootDecision1Criterion2", "rootDecision1Criterion2", rootDecision1, user); 
     final Criterion rootDecision1Criterion3 = criterionDao.create("rootDecision1Criterion3", "rootDecision1Criterion3", rootDecision1, user); 

     assertEquals(3, criterionDao.getCriteriaDefinedByDecision(rootDecision1.getId()).size()); 

метод Repository:

@Query("MATCH (d:Decision)<-[:DEFINED_BY]-(c:Criterion) WHERE id(d) = {decisionId} RETURN c") 
List<Criterion> getCriteriaDefinedByDecision(@Param("decisionId") Long decisionId); 

Что может быть причиной этой проблемы и как это исправить?

ОБНОВЛЕНО

Я обнаружил, что строительство

public Criterion(String name, String description, Decision owner, User author) { 
     this.name = name; 
     this.description = description; 
     this.owner = owner; 
     setAuthor(author); 
    } 

недостаточно для SDN 4 для того, чтобы создать ассоциацию ONE_TO_MANY .. Я должен добавить дополнительные строки для того, чтобы добавить объект в родительской коллекции также.

public Criterion(String name, String description, Decision owner, User author) { 
     this.name = name; 
     this.description = description; 
     this.owner = owner; 
     if (owner != null) { 
      owner.addCriterion(this); 
     } 
     setAuthor(author); 
    } 

Что я делаю неправильно?

ответ

0

Если бы та же самая проблема, попробуйте удалить DEFINED_BY @Relationship из Criterion

@NodeEntity 
    public class Criterion extends Authorable { 

    private final static String CONTAINS = "CONTAINS"; 
    private final static String DEFINED_BY = "DEFINED_BY"; 

    private String name; 

    private String description; 

    @Relationship(type = CONTAINS, direction = Relationship.INCOMING) 
    private CriterionGroup group; 


} 

Создать Criterion первый, а затем подключить их к Decision

+0

Спасибо, но мне нужно это поле в соответствии с моей бизнес-логики приложения. Он отлично работал в предыдущей версии SDN. Почему они изменили это? – brunoid

+0

Не знаю, у вас такая же проблема. –

Смежные вопросы