java.lang.StackOverflowError : null for the jpa saveAll

标签 java spring jpa

我在将 spring-boot 与 JPA 存储库集成时收到这些错误 这是代码

@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/api")
public class EmpController {

    @Autowired
    private CrudRepo crud;

    @Autowired
    private AddrCrudRepo addr;

    @Autowired
    private EntityManager entity;

    //@Autowired
    //private ModelMapper mapper;

private static int count = 0;


    @Bean
    public ModelMapper model() {
        return new ModelMapper();
    }

    //@Autowired
//  public EmpController(ModelMapper mapper) {
//      this.mapper = mapper;
//  }



    @RequestMapping(path = "/post-addr", method = RequestMethod.POST)
    public List<AddressModel> postAddr(@Valid @RequestBody List<AddressRequest> addr1){
    //  crud.findById(id)

        //AddressModel list = new AddressModel();

        EmployeeModel emp = new EmployeeModel();

        System.out.println("CALLING THE MAPPER "+addr1);
        List<AddressModel> addr_list = ObjectMapperUtils.mapAll(addr1, AddressModel.class);

        System.out.println("CALLED THE MAPPER "+addr_list);
        addr_list.forEach((a) -> {

            crud.findById(a.getEmpId()).ifPresent((b) -> {
                System.out.println(this.count++);
                a.setEmp_id(b);
                b.getAddress().add(a);

            });
        });


//      AddressModel addr_list = model().map(addr1, AddressModel.class);
//      
//      crud.findById(addr1.getEmp_id()).ifPresent((b) -> {
//          addr_list.setEmp_id(b);
//          
//      });`enter code here`
        System.out.println(addr_list.size());
        List<AddressModel> addr3 =  addr.saveAll(addr_list);
        System.out.println(addr3);
         return addr_list;

    }

postAddr 中出现错误方法,当它返回 List<AddressModel> 时这是AddressModel

@Entity
@Table(name="Emp_Address")
public class AddressModel  implements Serializable{

    @Column(name="address_id")
    @Id
    private Integer address_id;

    @Column(name="city")
    private String city;

    @Column(name="states")
    private String states;

    @Transient
    private Integer empId;

    @ManyToOne
    @JoinColumn(name="emp_id")
    private EmployeeModel emp_id;

    public AddressModel() {

    }

//getter and setter

EmployeeModel

@Entity
@Table(name="Employee")
public class EmployeeModel implements Serializable{

    @Column(name="Emp_id")
    @Id
    private Integer emp_id;

    @Column(name="Emp_Name")
    private String emp_name;

    @OneToMany(mappedBy="emp_id")
    private Collection<AddressModel> address = new ArrayList<>();

    public EmployeeModel() {

    }

//getter and setters

因此,虽然 saveAll 正确完成,但是当 postAddr 方法返回 List 时,它会抛出 StackOverflow

最佳答案

出现此 StackOverflow 错误是因为两个类生成的 toString 方法相互循环依赖。

EmployeeModel 尝试打印 AddressModel,但 AddressModel 再次尝试打印 EmployeeModel,因此出现错误。

尝试从 EmployeeModel 类的 toString 方法中删除 AddressModel 或相反,从 toString 中删除 EmployeeModel AddressModel 类的 方法。

关于java.lang.StackOverflowError : null for the jpa saveAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55074182/

相关文章:

java - 设置 remove() 函数不起作用

javax.persistence 缺少 JavaDoc

sql-server - 与 JPA、EclipseLink 和 SQL Server 2008 R2 的两天差异

java - 二分查找的比较次数

java - 数据库设计决策

java - 一些字符(例如括号)将在 Spring @RequestBody 中进行编码。如何解码它们?

java - 使用 SimpleMailMessage() 发送邮件时 Spring 中的 NullPointerException

java - 是否建议从jsp页面调用java dao类方法

java - SAP Hybris - Tomcat 忽略内存设置

java - 确定Android模拟时钟中时钟指针之间的角度已知的时间