Spring Data是否有返回特定字段的机制?
我熟悉语法:
Invoice findByCode(String code);
这个怎么样:
Integer findIdByCode(String code);
仅返回id字段。或
Tuple findIdAndNameByCode(String code);
返回一个元组。或
Invoice findIdAndNameByCode(String code);
返回仅填充特定字段的实体。可以使用构造函数仅在定义时使用那些字段 - 否则构造为空并填充字段。
修改
为了获得更多资格,我了解@Query,构造函数表达式以及@NamedEntityGraph等解决方案。我的问题很简单 - Spring数据是否支持如我所暗示的那样的简写语法?
如果没有,也许对于以后的版本来说这是一个很酷的增强...
我不是在寻找解决方法。
答案 0 :(得分:3)
您可以使用JPQL Constructor Expressions:
SELECT NEW com.company.PublisherInfo(pub.id, pub.revenue, mag.price)
FROM Publisher pub JOIN pub.magazines mag WHERE mag.price > 5.00
构造函数名称必须是完全限定的
答案 1 :(得分:1)
如果你想从表中返回1个字段并且它是原始的(或自动装箱),你可以使用下一个:
@Query("select distinct t.locationId from Table t")
List<Long> findAllWashroomLocationId();
其中:
答案 2 :(得分:1)
不确定您尝试实现的内容是否与在同一JPA生成的查询中使用多个投影相同(其中方法名称相同)。我在这篇文章中发了一个答案。
https://stackoverflow.com/a/43373337/4540216
所以我设法弄清楚如何使用多个投影 单一查询。
<T> T getByUsername(String username, Class<T> projection) This allows the method caller to specified the type of projection to be
应用于查询。
为了进一步改善这一点,它不容易出错,我做了一个空白 投影必须扩展的界面才能够 将类插入参数。
public interface JPAProjection { } public interface UserRepository extends CrudRepository<UserAccount, Long> { <T extends JPAProjection > T getByUsername(String username, Class<? extends JPAProjection> projection); }
投影界面
public interface UserDetailsProjection extends JPAProjection{ @Value("#{target.username}") String getUsername(); @Value("#{target.firstname}") String getFirstname(); @Value("#{target.lastname}") String getLastname(); }
然后我可以通过
调用查询方法getByUsername("...", UserDetailsProjection.class)