1.禁止使用lombok 的@Data 注释

  使用@Data注释后,默认会重写父类的toString()方法,hashcode()等方法,在往map里存的时候,会根据equals和hashcode方法,来计算下标,而如果@Data注释的类与其他类有关联的属性(如:@onetoone,@onetomany等)且关联的属性不为空时,会不断从关联方的属性进行查找,再从关联方查找该@Data注释的类,依次循环,造成堆栈溢出。

  例子:考试信息与报名信息以 1:n  进行关联

  

package com.apply.entity;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import javax.persistence.*;
import java.util.Date; /**
* @author tianp
* 报名信息 apply_info
*/
@Data
@Entity
@Table(name = "apply_info")
@ApiModel(value = "ApplyInfo", description = "报名信息对象")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class ApplyInfo {
@Id
@GeneratedValue
@ApiModelProperty(value = "id", dataType = "long")
private Long id; @ManyToOne
@JoinColumn(name = "examNum")
private ExamInfo examInfo; }

  

package com.apply.entity;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import lombok.Data; import javax.persistence.*;
import java.util.Date;
import java.util.Set; /**
* @author tianp
* 考试信息设置 apply_examinfo
*/
@Data
@Entity
@Table(name = "apply_examinfo")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class ExamInfo {
@Id
@GeneratedValue
private Long id; @OneToMany(mappedBy = "examInfo", cascade = CascadeType.ALL)
private Set<ApplyInfo> applyInfos; }
public class Test1 {
@Test
public void testObject() {
ExamInfo examInfo = new ExamInfo();
ApplyInfo applyInfo = new ApplyInfo();
Set<ApplyInfo> set = new HashSet<>();
set.add(applyInfo);
examInfo.setApplyInfos(set);
applyInfo.setExamInfo(examInfo);
System.out.println(examInfo.toString());
System.out.println(applyInfo.toString());
}
}
java.lang.StackOverflowError
at java.lang.StringBuilder.append(StringBuilder.java:136)
at com.apply.entity.ExamInfo.toString(ExamInfo.java:16)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.apply.entity.ApplyInfo.toString(ApplyInfo.java:17)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.apply.entity.ExamInfo.toString(ExamInfo.java:16)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.apply.entity.ApplyInfo.toString(ApplyInfo.java:17)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.apply.entity.ExamInfo.toString(ExamInfo.java:16)
。。。。。。

  

2.关联属性使一方的属性在json转换时生效

使用SpringMVC 默认的jackson 进行json转换时,存在关联属性,使用@JsonIgnore忽略属性(在one的一方进行忽略,)

Spring Data JPA stackoverflow的更多相关文章

  1. spring data jpa hibernate jpa 三者之间的关系

    JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服 ...

  2. 转:spring data jpa、 hibernate、 jpa 三者之间的关系

    原文链接:spring data jpa. hibernate. jpa 三者之间的关系 spring data jpa hibernate jpa 三者之间的关系 JPA规范与ORM框架之间的关系是 ...

  3. spring data jpa、 hibernate、 jpa 三者之间的关系

    http://www.cnblogs.com/xiaoheike/p/5150553.html JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架-- ...

  4. Spring Data Jpa系列教程--------实体解析和关联关系

    Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多) ...

  5. SpringBoot学习笔记:Spring Data Jpa的使用

    更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...

  6. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  7. spring boot(五):spring data jpa的使用

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

  8. 转:使用 Spring Data JPA 简化 JPA 开发

    从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...

  9. 深入浅出学Spring Data JPA

    第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map ...

随机推荐

  1. mac sublime text 3 add ctags plugin

    https://www.smslit.top/2015/11/14/macSTctags-Develop/ ctags插件for sublime text项目和ctags源码项目都在github上.

  2. new() 和 make() 的区别

    https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/07.2.md

  3. combination_m_n

    def combination_2_n(l): n, r = len(l), [] for i in range(0, n, 1): s = i + 1 for ii in range(s, n, 1 ...

  4. 阿里云ecs docker使用(4)---mongo docker

    1.新建一个Dockerfile文件  vim Dockerfile #VERSION 0.1.0 FROM ubuntu:14.04 #Install some RUN apt-get clean ...

  5. mysql 查看或者修改数据库密码

    首先启动命令行 1.在命令行运行:taskkill /f /im mysqld-nt.exe 下面的操作是操作mysql中bin目录下的一些程序,如果没有配置环境变量的话,需要切换到mysql的bin ...

  6. keras:Exception: Error when checking model target

    问题: 用keras的functional API搭建多输入多输出模型时,报错某个输出层对应的类标数组大小与模型中不一致. 解决办法:升级keras到最新版(doge脸)keras迭代太快了啊摔,总有 ...

  7. linux下更改文件夹名

    mv 旧文件夹名 新文件夹名 mv /usr/bin/python_old /usr/bin/python_new

  8. python 安装coreml

    2.安装pip,  下载get-pip.py, https://bootstrap.pypa.io/get-pip.py,然后Python 这个文件,如果没有权限就加sudo 3.安装coreml:这 ...

  9. python中的编码转换

    今天遇到了一个问题,将字符串“\uxxxx\uxxxx”转换成汉字.网上查了很多资料都不行. 后来看到,发现一个函数就OK了. str = str.decode('unicode_escape') 等 ...

  10. Window7 环境下 MariaDB 的安装 及使用

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方 ...