java - 具有 OneToMany 关系并希望使用 DTO 的 JPA 实体
问题描述
我有一个名为“Review”的实体,它与“User”实体具有 OneToOne 关系,与“ReviewStage”实体具有 OneToMany 关系。我已经实现了 DTO 模式,所以我也有 ReviewDTO,它实际上是发送到 UI 的内容。我正在使用 mapstruct 将实体映射到 dto。一切运行良好,但我宁愿在关系映射中使用 UserDTO 和 ReviewStageDTO。
这很好用:
@Entity
@Getter @Setter @NoArgsConstructor
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long reviewId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ownerId")
private User owner;
@OneToMany(mappedBy = "reviewId")
private Set<ReviewStage> stages;
}
为了好玩,我尝试了这个,但显然不起作用:
@Entity
@Getter @Setter @NoArgsConstructor
public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long reviewId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "ownerId")
private UserDTO owner;
@OneToMany(mappedBy = "reviewId")
private Set<ReviewStageDTO> stages;
}
我只需要朝着正确的方向轻推。谢谢,
解决方案
relationships
应该在only 之间,entities
如果你想创建一个dto
forReview
并且在这个里面dto
你想返回UserDto
例如你应该创建一个在tomapstruct class
之间映射UserEntity
UserDTO
例子
class UserDto {
/// put any fields here that you want to map
}
class ReviewDto {
UserDto user;
}
@Mapper(componentModel = "spring")
class UserMapper {
UserDto map(User user);
}
@Mapper(componentModel = "spring", uses={UserMapper.class})
class ReviewMapper {
ReviewDto map(Review review);
}
推荐阅读
- python - AWS Lambda 中的 Python 在线给出甚至不存在的缩进错误
- c# - 在 Web API 调用导致异常后处理响应中的内容的最佳实践
- azure-devops - Azure Pipeline:作为错误线程化的命令的输出
- java - Java String:删除换行符前后的所有其他空格
- optimization - 在 Prolog 中查找连接到顶点的所有节点
- ruby - Ruby Xcodeproj:将文件添加到非组文件夹
- sorting - 如何使用 cuda 计算矩阵每一行中元素的顺序?
- android-studio - 发布模式 APK 与调试模式 APK 不一样
- java - 在 GroupLayout 中使用 JComboBox 时出现 InvalidStateException
- flutter - ImageFiltered 与 BackdropFilter;有什么不同?