我可以将@EntityGraph应用于@Query吗?

时间:2016-11-28 19:26:47

标签: java hibernate jpa spring-data spring-data-jpa

在存储库中(注意:SELECT_LIST只是from Organization org where in ( ... ) and in (...)),IdentifiableWithName只是Persistable,使用getName()方法,将其作为投影。< / p>

@EntityGraph( Organization.NamedQuery.GRAPH_ID_NAME )
@Query( "select org " + SELECT_LIST + " order by org.name")
List<IdentifiableWithName> findOrganizationsForSelectList();

在实体上

@NamedEntityGraph( name = Organization.NamedQuery.GRAPH_ID_NAME, attributeNodes = {
        @NamedAttributeNode( AbstractPersistedEntity.Index.ID  ),
        @NamedAttributeNode( Organization.Index.NAME ) }
)

但结果查询似乎是实体的默认值,而不是简化为名称,id字段。这甚至可能吗?如果是这样我做错了什么?如果弹簧数据不可能,可以使用JPA(意味着这可能是一个可行的功能请求)吗?或者我有什么其他方式可以对投影进行@Query,或者只包含idname而不包含任何其他字段或联接的原始实体?

1 个答案:

答案 0 :(得分:0)

我假设你指的是一般意义上的Projection,而不是Spring Data JPA的特定Projection功能,它可以让你做你需要的事情:

https://spring.io/blog/2016/05/03/what-s-new-in-spring-data-hopper#projections-on-repository-query-methods

  

封闭式投影允许我们仅优化查询执行   从数据存储中查询公开的属性。

http://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#projections

public interface IdentifiableWithName{
    Long getId();
    String getName();
}

interface SomeRepository extends CrudRepository<SomeClass, Long>{
    @Query( "select org " + SELECT_LIST + " order by org.name")
    List<IdentifiableWithName> findOrganizationsForSelectList();
}