JPA提供的findAll等查询方法在有关联的对象时

比如:在查userInfo

@Entity
@Table(name = "user_info")
public class UserInfo implements Serializable {
@Id
@GeneratedValue
private Integer uid;
@Column(unique =true)
private String username;//帐号
private String name;//名称(昵称或者真实姓名,不同系统不同定义)
private String password; //密码;
private String salt;//加密密码的盐
private byte state;//用户状态,0:创建未认证(比如没有激活,没有输入验证码等等)--等待验证的用户 , 1:正常状态,2:用户被锁定.
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "SysUserRole", joinColumns = { @JoinColumn(name = "uid") }, inverseJoinColumns ={@JoinColumn(name = "roleId") })
private List<SysRole> roleList;// 一个用户具有多个角色 // 省略 get set 方法

关联的Role对象在userinfo对象转JSON数据返回时,会报无法序列化的异常,因为此时Role对象是代理类,无法实现序列化

网友提供的方法有加json包的然后重写转换器的,有加jsonInogerjson的注解,感觉还是本人的方法直接

首先新建一个model和entity字段一样的类

然后直接转换后再转为json数据

如下

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfoResp { private Integer uid;
private String username;//帐号
private String name;//名称(昵称或者真实姓名,不同系统不同定义)
private String password; //密码;
private String salt;//加密密码的盐
private byte state;//用户状态
}
@LoginToken
@ApiOperation("查询用户列表")
@RequiresPermissions("userInfo:view")
@PostMapping("/userInfo/userList")
public Result getUserList(@RequestBody UserInfoReq userInfoReq){
log.info("查询用户列表");
int page = NumberUtils.toInt(userInfoReq.getCurrentPage(), 0);
int size = NumberUtils.toInt(userInfoReq.getPageSize(), 10);
PageHelper.startPage(page,size);
List<UserInfo> userList = userInfoService.getUserList();
ArrayList<UserInfoResp> list = Lists.newArrayList();
Iterator<UserInfo> it = userList.iterator();
while (it.hasNext()){
UserInfoResp resp = new UserInfoResp();
BeanUtils.copyProperties(it.next(),resp);
list.add(resp);
}
PageInfo pageInfo = new PageInfo<>(list);
return Result.success(pageInfo);
}

这样迂回就可以得到JSON数据,而且model类还可以加自己需要的其他字段

JPA的其他使用在记一下

1、JPA提供的方法支持级联查询和级联删除

2、自定义的删除和修改方法注意需要在service的方法上加事物

@Transactional(rollbackFor = Exception.class ,propagation = Propagation.REQUIRED ,isolation = Isolation.READ_COMMITTED)
public void updateRolePermission(SysRoleReq sysRoleReq){
Integer rid = sysRoleReq.getId();
Set<Integer> sets = sysRoleReq.getSets();
sysRoleRepository.deleteRolePermission(rid);
Iterator<Integer> iterator = sets.iterator();
while (iterator.hasNext()){
Integer next = iterator.next();
sysRoleRepository.saveRolePermission(next,rid);
}
}

自定义的方法注解使用如下

@Repository
public interface SysRoleRepository extends JpaRepository<SysRole,Integer> { @Modifying
@Query(value = "insert into sys_role_permission(permission_id,role_id) values(?1,?2)",nativeQuery = true)
int saveRolePermission(Integer pid, Integer rid);
@Modifying
@Query(value = "delete from sys_role_permission where role_id =?1)",nativeQuery = true)
int deleteRolePermission(Integer rid);
@Query(value = "select * from sys_role ",nativeQuery = true)
List<SysRole> getRoleList();
}
nativeQuery=true表示为原生的sql

JPA默认方法查询遇到转JSON的处理的更多相关文章

  1. 【tmos】spring data jpa 创建方法名进行简单查询

    参考链接 spring data jpa 创建方法名进行简单查询:http://www.cnblogs.com/toSeeMyDream/p/6170790.html

  2. python测试开发django-15.查询结果转json(serializers)

    前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...

  3. Spring data jpa 复杂动态查询方式总结

    一.Spring data jpa 简介 首先我并不推荐使用jpa作为ORM框架,毕竟对于负责查询的时候还是不太灵活,还是建议使用mybatis,自己写sql比较好.但是如果公司用这个就没办法了,可以 ...

  4. 【Spring Data 系列学习】Spring Data JPA @Query 注解查询

    [Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...

  5. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  6. 自定义mysql类用于快速执行数据库查询以及将查询结果转为json文件

    由于每次连接数据库进行查询比较麻烦,偶尔还需要将查询结果转为json格式的文件, 因此暂时定义一个mysql的类,将这些常用的方法进行封装,便于直接调用(代码如下,个人用,没写什么注释). 注:导入了 ...

  7. 学习Spring-Data-Jpa(八)---定义方法查询

    1.查询策略 spring-data一共有三种方法查询策略: QueryLookupStrategy.Key.CREATE,尝试根据方法名进行创建.通用方法是从方法名中删除一组特定的前缀,然后解析该方 ...

  8. @Convert 注解在jpa中进行查询的注意事项

    如果要实现实体类中属性的类型和数据库表中字段的类型相互转化,则需要使用 @Convert 注解 package javax.persistence; import java.lang.annotati ...

  9. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

随机推荐

  1. lsof 详解

    lsof常用参数 lsof 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位lsof -i 列出所有网络连接lsof -i tcp 列出所有tcp连接信息lsof -i udp  ...

  2. vue中使用腾讯云Im

    在vue中使用腾讯云Im 通信时,官方给出的文档及sdk提供的都是es5的写法.我们在vue中使用均需要用es6的方式来改写sdk的js文件及按自己所需要的业务调用对应的api就行了 1.对sdk的j ...

  3. HDU5669

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:传送门  Portal  原题目描述在最下面.  给你n个点 ...

  4. idea 社区版+spring boot+ssm+swagger创建rest api

    新手上路,出了好多错,记录一下 1.创建数据库:springBootSsmTest 2.打开IDEA创建 Spring boot项目:File——New——Project——Spring Assist ...

  5. hexo next主题深度优化(六),使用hexo-neat插件压缩页面,大幅度提升页面性能和响应速度。

    文章目录 隆重感谢: 背景 开始 试水 成功的案例 安装插件,执行命令. hexo _config.yml文件添加 坑 跳过压缩文件的正确配置方式 压缩html时不要跳过.md文件 压缩html时不要 ...

  6. A1075 PAT Judge (25 分)

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  7. 实现solr热词排行榜

    现在有业务场景,要求实现词库里面,最新,最热的词并显示,点击热词后可以进入相关信息的文章或者句子 热词的显示频率12小时更新一次. 实现思路: 实现步骤:

  8. pyhton2与python3的使用区别

    刚刚开始学习python这门编程语言,考虑到python不同版本的一些用法不同,收集整理了一份python2与python3之间的区别,目前可能不全 编码(核心类) Python2默认编码ascii, ...

  9. USACO 2008 January Silver Telephone Lines /// 二分最短路 邻接表dijkstra oj22924

    题目大意: 一共有N (1 ≤ N ≤ 1,000)个电线杆,有P P (1 ≤ P ≤ 10,000)对电线杆是可以连接的, 用几条线连接在一起的电线杆之间都可相互通信,现在想要使得电线杆1和电线杆 ...

  10. Winform 获取桌面设备上下文

    //获得桌面设备上下文 us(Graphics g = Graphics.FromHwnd(IntPtr.Zero)) { g.DrawLine(Pens.Red, , , , ); }