在存储库中(注意: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
,或者只包含id
和name
而不包含任何其他字段或联接的原始实体?
答案 0 :(得分:0)
我假设你指的是一般意义上的Projection,而不是Spring Data JPA的特定Projection功能,它可以让你做你需要的事情:
封闭式投影允许我们仅优化查询执行 从数据存储中查询公开的属性。
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();
}