В моей Neo4j 3.0.1
и SDN 4.1.1.RELEASE
проекта У меня есть следующие объекты:Neo4j 3.0.1 SDN 4.1.1.RELEASE фантомные узлы
@NodeEntity
public class CriterionGroup extends Authorable {
private final static String DEFINED_BY = "DEFINED_BY";
private final static String CONTAINS = "CONTAINS";
private String name;
private String description;
@Relationship(type = DEFINED_BY, direction = Relationship.OUTGOING)
private Decision owner;
@Relationship(type = CONTAINS, direction = Relationship.OUTGOING)
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;
....
@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 = CONTAINS, direction = Relationship.INCOMING)
private Set<Decision> parentDecisions = new HashSet<>();
@Relationship(type = CONTAINS, direction = Relationship.OUTGOING)
private Set<Decision> childDecisions = new HashSet<>();
@Relationship(type = DEFINED_BY, direction = Relationship.INCOMING)
private Set<CriterionGroup> criterionGroups = new HashSet<>();
@Relationship(type = DEFINED_BY, direction = Relationship.INCOMING)
private Set<Criterion> criteria = new HashSet<>();
....
В моем тесте я пытаюсь удалить CriterionGroup
со следующим способом: репозитария
@Query("MATCH()-[r]-(cg:CriterionGroup) WHERE id(cg) = {criterionGroupId} DELETE cg, r")
void deleteCriterionGroup(@Param("criterionGroupId") Long criterionGroupId);
то, что я пытаюсь получить эту CriterionGroup
по идентификатору
criterionGroupRepository.findOne(id);
и он возвращает NULL. Все идет нормально.
Сразу после того, что я пытаюсь получить групповой объект из Criterion
, который был в удаленном CriterionGroup
и он возвращает .. удален CriterionGroup
criterionRepository.findOne(criterion.getId()).getGroup()
Что я делаю неправильно? Все работало нормально на SDN 3.4.4.RELEASE
и Neo4j 2.3.3
, но с Neo4j 3.0.1
SDN 4.1.1.RELEASE
из-за моих ограниченных знаний. У меня много неожиданных ситуаций.
Кроме того, хорошо ли иметь следующее определение отношений в единое целое (я удалил enforceTargetType
)
@Relationship(type = CONTAINS, direction = Relationship.INCOMING)
private Set<Decision> parentDecisions = new HashSet<>();
@Relationship(type = CONTAINS, direction = Relationship.OUTGOING)
private Set<Decision> childDecisions = new HashSet<>();
они имеют разные направления.
Спасибо за ваш ответ. Каков правильный способ получения ссылки на объект Session? Кроме того, для 'Decision.parentDecisoins' у меня есть следующие методы:' Set getParentDecisions() ',' addParentDecision (решение по решению) ',' removeParentDecision (решение решения) '.. если все они также будут аннотированы с помощью' @Relationship (type = CONTAINS, direction = Relationship.INCOMING) '? Если да, зачем нам такое избыточное резервирование? –
brunoid
Я нашел способ доступа к сеансу. Но 'session.detachNodeEntity (criterionGroupId);' не работает. Но 'session.clear();' очищает все остальные объекты, поэтому все мои существующие тесты терпят неудачу. – brunoid
Также у вас есть планы по автоматической синхронизации состояния между OGM и пользовательским выполнением запроса Cypher? – brunoid