Spring boot 加入Spring数据JPA
我有以下几个要素 课程Spring boot 加入Spring数据JPA,spring-boot,spring-data-jpa,Spring Boot,Spring Data Jpa,我有以下几个要素 课程 public class Course{ int courseId; int courseName; @OneToMany(fetch=FetchType.Lazy,mappedBy="course") Set <CourseProperty> courseProp; ... setters & getters } 现在这是双向连接。因此,我必须将@JsonIgnore放在CourseProp的Cour
public class Course{
int courseId;
int courseName;
@OneToMany(fetch=FetchType.Lazy,mappedBy="course")
Set <CourseProperty> courseProp;
... setters & getters
}
现在这是双向连接。因此,我必须将@JsonIgnore
放在CourseProp
的Course
属性中,否则当我打印Course
对象时,它会导致无限循环
但现在我无法打印包含课程对象的课程道具对象。如何更改实体。比如说我想做一些类似于
Select * from Course a join CourseProp b on a.courseId = b.courseId and b.prop1="demo"
我想从CourseProp存储库中运行这个查询(由Spring Data JPA提供),它将生成CourseProp对象,但由于JsonIgnore的原因,我不会在Course Prop中获取Course对象。我认为直接将
实体
序列化为JSON
,使用类似于Jackson
的框架不是一个好主意。因为这些框架试图将传递给JSON
的对象完全序列化,并且因为实体
是Hibernate
代理,所以它将获取对象的所有关联。即使是那些您标记为懒惰的属性,您也不需要它们。此外,如果对象中存在双向关系,则会陷入无限循环
相反,我认为最好为您的实体创建模型
或DTO
类,并使用您需要的属性实例化它们,然后将这些对象序列化为JSON
您能提供更多关于您的项目的信息吗?为什么要使用@JsonIgnore注释?因为如果我想打印一个持久化对象(使用findOne获取),那么它是一种无限循环,因为COurse对象中有COurse Prop,COurse Prop中有COurse对象。所以它一直是这样嵌套的。
Select * from Course a join CourseProp b on a.courseId = b.courseId and b.prop1="demo"