比如在获取用户资料时,我们不想把密码等重要信息全部带出。那时,我们就要用到jpa query 返回指定字段。
我要在网上查找了下都是比较基础的单表查询。好了,如何写呢?
例如,下面的我们会将user的所有属性都会带出来,
1 2 3 4 5
| @Query("SELECT u FROM BaseUser u JOIN u.roles roles WHERE roles.roleCode = :roleCode)
List<BaseUser> findUserByRoleCode(@Param("roleCode") String roleCode);
⚠:上面select 后面的 “u” 是一个BaseUser,包括所有的属性。这是我们所不需要的,它泄漏了太多的信息。
|
我们要指定字段,怎么定义呢?前面试了两次都失败了,最后参考Spring Data Jpa 查询返回自定义对象 才解决,非常感谢。也分享下我的经验。
1 2 3 4 5 6 7 8 9
| 1、 @Query("SELECT name,id,org FROM BaseUser u JOIN u.roles roles WHERE roles.roleCode = :roleCode)
⚠ 这个根本就不能编译通过。
2、 @Query("SELECT u.name,u.id,u.org FROM BaseUser u JOIN u.roles roles WHERE roles.roleCode = :roleCode)
⚠ 这个可以编译通过 但返回的不是BaseUser对象,只包括name,id属性和 org对象。不符合我的条件。
3、@Query("SELECT new BaseUser(u.id,u.loginname,u.roles,u.org) FROM BaseUser u JOIN u.roles roles WHERE roles.roleCode = :roleCode)
|
只有这个是正确的,返回了baseUser对象。这个要注意的是必须在实体baseuser中创建相应的构造方法。