SpringDataJpa 的坑

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 注解注定需要排除的字段! 这样就可以避免递归查询.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值