如何正确实现类继承,在java neo4j中注释为@QueryResult

时间:2015-05-20 10:48:31

标签: java spring neo4j

我正在使用neo4j + spring数据。要访问我使用接口的数据,扩展GraphRepository<E>。例如

public interface EntryRepository extends GraphRepository<Entry> {

    @Query("start parent=node({0}), entry=node({1}) "
            + "match parent-[*1..2{removed:false}]->entry "
            + "return distinct entry")
    Entry findOne(Long parentId, Long entryId);
}

我正在尝试获取与我的域模型不同的数据。我的自定义模型看起来像那样

@QueryResult
public class EntryBean {
    @ResultColumn("id")
    private Long id;
    @ResultColumn("name")
    private String name;
    @ResultColumn("content")
    private String content;
    ...
    //getters and setters
}

@QueryResult
public class BoardBean {
    @ResultColumn("id")
    private Long id;
    @ResultColumn("name")
    private String name;
    ...
    //getters and setters
}

显然,最好将重复字段分隔为Base类并从中继承。所以,我正在做下一步

@QueryResult
public class BaseBean {
    @ResultColumn("id")
    private Long id;
    @ResultColumn("name")
    private String name;
    ...
}

@QueryResult
public class EntryBean extends BaseBean{
    @ResultColumn("content")
    private String content;
    ...
    //getters and setters
}

我不再需要BoardBean了。但是当我尝试运行查询时

public interface EntryRepository extends GraphRepository<Entry> {
@Query("start user=node({0}), board=node({1}) "
            + "... "
            + "return id(entry) as id, entry.name as name, entry.content as content")
    List<EntryBean> getRelatedEntries(Long userId, Long boardId);
}

我被数据填充只是直接声明为EntryBean类的字段(即“内容”字段)。 那么,我如何才能正确实现@QueryResult类层次?

1 个答案:

答案 0 :(得分:1)

这是一个错误,已经存在了差不多两年(即使在2.3.5.RELEASE!)the class负责转换带注释的POJO。

实际上,它在最具体的类型上调用getDeclaredFields,因此可以跳过可能继承的注释字段。

在修复the issue之前,我的建议是容忍这方面的表面重复,而不是依赖继承。