java - JPA 实体到 DTO 映射创建深拷贝
问题描述
我的班级结构如下
@Entity
@Table(name = "CourseGroups")
public class CourseGroup {
@Id
@GeneratedValue
long courseGroupId;
@OneToMany(mappedBy = "courseGroup")
@JsonManagedReference
List<Course> courseList;
//Getters and Setters
}
@Entity
@Table(name = "Course")
public class Course {
@Id
@GeneratedValue
long courseId;
@ManyToOne
@JoinColumn(name = "courseGroupId")
@JsonBackReference
CourseGroup courseGroup;
@OneToMany(mappedBy = "course",fetch = FetchType.LAZY)
@JsonManagedReference
List<CoursePart> courseParts;
}
@Entity
@Table(name = "courseParts")
public class CoursePart {
@Id
@GeneratedValue
long partId;
@ManyToOne
@JoinColumn(name = "courseid")
@JsonBackReference
Course course;
@ManyToMany(mappedBy = "coursePartList")
List<Subject> subjectsList;
}
为了返回 REST 结果,我创建了具有几乎相同字段的 DTO 类。我的主要动机是避免在我直接从控制器返回 JPA 实体时发生对象的无限嵌套。
courseGroup{
groupId,
courseList:[
{
courseId ,
partList:[
{
partId,
subjectList:[ //Again Subject and So on]
}]
}
]
}
因此,我使用 ModelMapper 将实体映射到 DTO 类,但模型映射器再次为 List 字段调用 get,这导致休眠加载列表并再次在列表中列出等等。我可以做@JsonIgnore,但它完全忽略了对象列表。我想要做的是只返回特定级别的嵌套列表,而不是所有嵌套列表。喜欢
courseGroup{
groupId,
courseList:[
{
courseId ,
partList:[
{
partId, subjectId}]
}
]
}
模型映射器中是否有任何方法可以仅将嵌套对象映射到某个级别而不是完整的对象本身
解决方案
推荐阅读
- r - 如何将对应的统计数据从线性回归模型导出到 R 中的表格?
- netlogo - NetLogo - 所有海龟的总和列表
- javascript - ipcRenderer.on() 函数未接收到 mainWindow.webContents.send()
- php - 如何在链接codeigniter中传递id值
- applescript - 如何修复程序中未定义的变量?
- pyspark - NullPointerException 与 pyspark 数据框
- android - CameraPreview 在开始时未显示,但在热重新加载后
- regex - 需要一个在表达式后包含所有字符的正则表达式
- html - 有没有办法通过单击另一个来切换 CSS 元素的高度?
- python - 使用 pandas 加入混合软键和硬键的复合键