【问题标题】:Spring Data @Query on fields字段上的 Spring Data @Query
【发布时间】:2013-08-24 03:10:12
【问题描述】:

只有当我从数据库中检索实体时,属性上的 @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) 之后运行,但 alias 字段是 null 如果我没有通过取消注释该行从 DB 中读取它

@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());
}

【问题讨论】:

    标签: neo4j spring-data spring-data-neo4j


    【解决方案1】:

    试试

     t=teamRepo.save(t);
    

    我不认为保存操作会更新你给它的 POJO,而返回的对象应该是一个托管实体。 关键在于参考文档

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2015-01-11
      • 2016-04-11
      • 1970-01-01
      相关资源
      最近更新 更多