SringDataJpa 关于一对多 或者多对多 递归查询 内存溢出的问题!
查询出现死循环递归
直接上代码
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.SQLInsert;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
//@Data
//@JsonIgnoreProperties(value = {"userGroup"})
@Getter
@Setter
@Entity
@Table(name = "users")
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@NotNull(message = "用户ID不能为空",groups = UPDATE.class)
private Integer userId;
@Column(name = "user_name")
@NotBlank(message = "用户名不能为空",groups = {SAVE.class,UPDATE.class})
private String userName;
@Column(name = "user_phone")
private String userPhone;
@Column(name = "user_createtime")
private LocalDate userCreateTime;
@Column(name = "user_remake")
private String userRemake;
@Column(name = "users_group_id")
@NotNull(message = "用户分组不能为空",groups = {UPDATE.class,SAVE.class})
private Integer usersGroupId;
//多方:多对一,从属于一个客户
//关系注解
@ManyToOne(targetEntity = UserGroup.class, fetch = FetchType.EAGER,optional = false)
//配置外键
@JoinColumn(
//外键名称 当前表的外键
name = "users_group_id",
//外键的值来源于谁
referencedColumnName = "user_group_id",
insertable = false, updatable = false
)
private UserGroup userGroup;//所属作者
/*@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userPhone='" + userPhone + '\'' +
", userCreateTime=" + userCreateTime +
", userRemake='" + userRemake + '\'' +
'}';
}*/
//查询条件
// 开始日期
@Transient
private String startTime;
// 结束日期
@Transient
private String endTime;
}
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
import java.time.LocalDate;
import java.util.List;
//@Data
@Getter
@Setter
@Entity
@Table(name="user_group")
@JsonIgnoreProperties(value = {"users"})
public class UserGroup {
@Id
@Column(name="user_group_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userGroupId;
@Column(name="user_group_name")
private String userGroupName;
@Column(name="user_createtime")
private LocalDate userCreateTime;
// @OneToMany(mappedBy = "userGroup",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
//一方:一对多,包含多个联系人
/*//关系注解
@OneToMany(targetEntity = LinkMan.class)
//配置外键
@JoinColumn(
//外键名称
name = "lkm_cust_id",
//外键的值来源于谁
referencedColumnName = "cust_id"
)*/
//配置让客户放弃维护外键的权利:删除@JoinColumn注解
@OneToMany(
//mappedBy: 填入的是对方有@JoinColumn注解的属性名称
mappedBy = "userGroup",
// fetch=FetchType.EAGER // 立即加载
fetch = FetchType.EAGER
)
private List<User> users;//用户列表
/* @Override
public String toString() {
return "UserGroup{" +
"userGroupId=" + userGroupId +
", userGroupName='" + userGroupName + '\'' +
", userCreateTime=" + userCreateTime +
'}';
}*/
}
只需要在实例类上加上 @JsonIgnoreProperties 注解注定需要排除的字段! 这样就可以避免递归查询.