Я двигаюсь от 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);
}
Что я делаю неправильно?
Спасибо, но мне нужно это поле в соответствии с моей бизнес-логики приложения. Он отлично работал в предыдущей версии SDN. Почему они изменили это? – brunoid
Не знаю, у вас такая же проблема. –