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"