关于spring jpa 多表关系查询时,自定义返回对象

比如在获取用户资料时,我们不想把密码等重要信息全部带出。那时,我们就要用到jpa query 返回指定字段。

我要在网上查找了下都是比较基础的单表查询。好了,如何写呢?

例如,下面的我们会将user的所有属性都会带出来,

 @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 查询返回自定义对象](https://my.oschina.net/u/1045177/blog/550173) 才解决,非常感谢。也分享下我的经验。

 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中创建相应的构造方法。

猜你喜欢

转载自mogee.iteye.com/blog/2353331