Spring数据@字段查询



只有当我从DB中检索实体时,属性上的@Query才会检索值。

@NodeEntity
public class Team
{
    @GraphId
    private Long nodeId;
    @RelatedTo (type = "PREVIOUSLY_KNOWN_AS")
    private Team previouslyKnownAs;
    @Query ("START t=node({self}) MATCH t-[:PREVIOUSLY_KNOWN_AS]-other RETURN other")
        private Iterable<Team> aliases;
}

只有当我取消对该行的注释以从数据库中显式读取该行时,下面的测试才有效。为什么有必要?我看到查询在save(t)之后运行,但如果我没有通过取消行从DB中读取,则alias字段为null

@Test
public void alias()
{
    Team t = new Team();
    t.setName("Alpharetta One");
    Team prev = new Team();
    prev.setName("Previous Name");
    teamRepo.save(prev);
    t.setPreviouslyKnownAs(prev);
    teamRepo.save(t);
    //t = teamRepo.findOne(t.getNodeId());//only works if I uncomment
    assertNotNull(t.getAliases());
}

尝试

 t=teamRepo.save(t);

我不认为保存操作会更新你给它的POJO,而返回的Object应该是托管的enttiy。关键在于参考文件

@Query注释利用了Spring Data Neo4j支持的委派基础设施。它提供了动态字段,当访问这些字段时,返回由所提供的查询语言表达式选择的值。

由于它是一个动态字段,因此每次调用get方法时都不会实例化该值,而是从DB中获取该值。为此,必须使用代理对象。然而,SDN无法更改对代理对象的t对象引用,这就是为什么如果您没有使用save()返回的实体,它就不起作用。

相关内容

  • 没有找到相关文章

最新更新