【问题标题】:Neo4j OGM relationship in one entity onlyNeo4j OGM 关系仅在一个实体中
【发布时间】:2017-02-07 14:58:41
【问题描述】:

我有两个 NodeEntity 类,它们以多对一的关系关联(例如,多对一)。假设许多实体 A 与单个实体 B 相关。我希望能够加载深度大于 0 的实体 B,但不加载许多相关的实体 A,实际上不需要访问实体 A来自实体 B。

是否可以仅在实体 A 上指定关系,将其从实体 B 中排除,这样加载实体 B 不会加载任何实体 A,但加载实体 A 会加载实体 B?我担心之后保存实体,因为我不想在保存实体 B 时失去关系。

【问题讨论】:

    标签: java neo4j neo4j-ogm


    【解决方案1】:

    是的,您可以这样做。看看这个测试用例

    @Test
    @Transactional
    public void shouldNotDeleteUnmappedRelations() throws Exception {
    
        session.purgeDatabase();
        session.query("CREATE (a1:A) CREATE (a2:A) CREATE (b:B{name:'b'}) CREATE (a1)-[:REL]->(b) CREATE (a2)-[:REL]->(b) RETURN id(b) as id", Collections.emptyMap());
    
        Collection<B> res = session.loadAll(B.class, new Filters("name", "b"), 0);
        B b = res.iterator().next();
        assertThat(b).isNotNull();
    
        session.save(b);
        session.clear();
    
        Collection<A> allA = session.loadAll(A.class);
        assertThat(allA).hasSize(2);
        assertThat(allA).extracting("b").isNotNull();
    }
    

    【讨论】:

    • 太棒了,有技巧!它还与 B 上的其他关系一起工作,然后将加载深度增加到 0 以上 - 在 B 上定义的关系中的对象已加载,但不是仅在 A 上定义的对象,这正是我需要的
    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 2021-08-31
    • 1970-01-01
    • 2019-02-05
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多