原代码:java
SysUser类:json
@Entity public class SysUser implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long uid;// 用户id @Column(unique=true) private String username;// 帐户 private String name;// 名称 private String password; private String salt; private byte state; @ManyToMany(fetch=FetchType.EAGER) @JoinTable(name="SysUserRole", joinColumns= {@JoinColumn(name="uid", referencedColumnName="uid")}, inverseJoinColumns= {@JoinColumn(name="roleId", referencedColumnName="id")}) private List<SysRole> roleList;// 一个用户具备多个角色
SysRole类:fetch
@Entity public class SysRole implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long id; private String role; private String description; private Boolean available = Boolean.FALSE;// 是否可用 // 多对多 @ManyToMany(fetch=FetchType.EAGER) @JoinTable(name="SysRolePermission", joinColumns= {@JoinColumn(name="roleId", referencedColumnName="id")}, inverseJoinColumns= {@JoinColumn(name="permissionId", referencedColumnName="id")}) private List<SysPermission> permissions; // 多对多 @ManyToMany @JoinTable(name="SysUserRole", joinColumns= {@JoinColumn(name="roleId", referencedColumnName="id")}, inverseJoinColumns= {@JoinColumn(name="uid", referencedColumnName="uid")}) private List<SysUser> users;
此处省略set get 和toString方法。ui
查询一个user时返回数据以下:url
{"uid":1,"username":"admin","name":"admin","password":"admin","salt":"d3c59d25033dbf980d29554025c23a75","state":1,"roleList":[{"id":1,"role":"admin","description":"管理员","available":true,"permissions":[{"id":1,"name":"用户管理","resourceType":"menu","url":"userInfo/userList","permission":"userInfo:view","parentId":0,"parentIds":"0/","available":true}]},{"id":2,"role":"vip","description":"VIP会员","available":true,"permissions":[{"id":1,"name":"用户管理","resourceType":"menu","url":"userInfo/userList","permission":"userInfo:view","parentId":0,"parentIds":"0/","available":true}]}]}{"uid":1,"username":"admin","name":"admin","password":"admin","salt":"d3c59d25033dbf980d29554025c23a75","state":1,"roleList":[{"id":1,"role":"admin","description":"管理员","available":true,"permissions":[{"id":1,"name":"用户管理","resourceType":"menu","url":"userInfo/userList","permission":"userInfo:view","parentId":0,"parentIds":"0/","available":true}]},{"id":2,"role":"vip","description":"VIP会员","available":true,"permissions":[{"id":1,"name":"用户管理","resourceType":"menu","url":"userInfo/userList","permission":"userInfo:view","parentId":0,"parentIds":"0/","available":true}]}]}{"uid":1,"username":"admin","name":"admin","password":"admin","salt":"d3c59d25033dbf980d29554025c23a75","state":1,"roleList":[{"id":1,"role":"admin","description":"管理员","available":true,"permissions":[{"id":1,"name":"用户管理","resourceType":"menu","url":"userInfo/userList","permission":"userInfo:view","parentId":0,"parentIds":"0/","available":true}]},{"id":2,"role":"vip","description":"VIP会员","available":true,"permissions":[{"id":1,"name":"用户管理","resourceType":"menu","url":"userInfo/userList","permission":"userInfo:view","parentId":0,"parentIds":"0/","available":true}]}]}...
后台报错StackOverFlow3d
问题缘由:根据查询结果可知,查询一定是经历了死循环,缘由是user类中有一个role集合,role类中有一个user集合code
解决方法:中断循环便可,首先这不是jpa的问题,是序列化的问题,咱们只要中断序列化就能够了,在user类中使用jackson的注解ip
@JsonIgnoreProperties(value = {"users"})get
代码以下:it
@JsonIgnoreProperties(value = {"users"}) @ManyToMany(fetch=FetchType.EAGER) @JoinTable(name="SysUserRole", joinColumns= {@JoinColumn(name="uid", referencedColumnName="uid")}, inverseJoinColumns= {@JoinColumn(name="roleId", referencedColumnName="id")}) private List<SysRole> roleList;