首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4j 3.0.1SDN4.1.1.RELEASE幻影节点

Neo4j 3.0.1SDN4.1.1.RELEASE幻影节点
EN

Stack Overflow用户
提问于 2016-05-24 20:48:31
回答 1查看 169关注 0票数 2

在我的Neo4j 3.0.1SDN 4.1.1.RELEASE项目中,我有以下实体:

代码语言:javascript
运行
复制
@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

代码语言:javascript
运行
复制
@Query("MATCH ()-[r]-(cg:CriterionGroup) WHERE id(cg) = {criterionGroupId} DELETE cg, r")
void deleteCriterionGroup(@Param("criterionGroupId") Long criterionGroupId);

然后我试着用id得到这个CriterionGroup

代码语言:javascript
运行
复制
criterionGroupRepository.findOne(id);

它返回NULL。到目前一切尚好。

在此之后,我试图从Criterion中获取组对象,该对象位于已删除的CriterionGroup中,并返回..删除CriterionGroup

代码语言:javascript
运行
复制
criterionRepository.findOne(criterion.getId()).getGroup()

我做错什么了?在SDN 3.4.4.RELEASENeo4j 2.3.3上,一切都很好,但是由于知识有限,Neo4j 3.0.1 SDN 4.1.1.RELEASE有很多意想不到的情况。

另外,是否可以在一个实体中定义以下关系(我已经删除了enforceTargetType )

代码语言:javascript
运行
复制
@Relationship(type = CONTAINS, direction = Relationship.INCOMING)
private Set<Decision> parentDecisions = new HashSet<>();

@Relationship(type = CONTAINS, direction = Relationship.OUTGOING)
private Set<Decision> childDecisions = new HashSet<>();

他们有不同的方向。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-25 12:16:19

据我所知,您正在重新显示这个CriterionGroup,因为您通过自定义查询删除了它,从而绕过了OGM。图表知道您的更改,但OGM的映射上下文不知道。解决方案是在您使用Session.detachEntity(id)通过自定义查询删除该实体之后,将它从会话中注销,或者使用session.clear()刷新整个会话。

是的,有包含关系定义是可以的,请记住,对于标记为INCOMING的任何关系,如果parentDecisions存在于@Relationship(type = CONTAINS, direction = Relationship.INCOMING)中,则必须对访问器、变量和属性进行注释。

更新:还确保您的对象模型与您通过自定义查询删除的内容同步。也就是说,如果要通过自定义查询删除CriterionGroup,还应该更新对象模型以反映这一点,即criterion.group=null。或者,使用session.clear()完全清除会话并重新加载所有依赖实体。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37423585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档