假设您使用这样的JDL脚本为带有帖子的博客创建了一个JHipster应用,并且您希望拥有一个BlogDTO来显示其中的帖子(以及一个BlogDTO来显示每个帖子具有的评论):>
entity Blog {
creationDate Instant required
title String minlength(2) maxlength(100) required
}
entity Post {
creationDate Instant required
headline String minlength(2) maxlength(100) required
bodytext String minlength(2) maxlength(1000) required
image ImageBlob
}
entity Comment {
creationDate Instant required
commentText String minlength(2) maxlength(1000) required
}
// RELATIONSHIPS:
relationship OneToMany {
Blog to Post{blog required}
Post{comment} to Comment{post(headline) required}
}
// Set pagination options
paginate all with pagination
// DTOs for all
dto * with mapstruct
// Set service options to all except few
service all with serviceClass
// Filtering
filter *
Jhipster将使用其DTO创建Blog,Post和Comment实体,并假设您不希望在Blog中填充Posts或在Posts中添加评论,因此BlogMapper如下所示:
@Mapper(componentModel = "spring", uses = {})
public interface BlogMapper extends EntityMapper<BlogDTO, Blog> {
@Mapping(target = "posts", ignore = true)
Blog toEntity(BlogDTO blogDTO);
default Blog fromId(Long id) {
if (id == null) {
return null;
}
Blog blog = new Blog();
blog.setId(id);
return blog;
}
}
使用类似BlogDTO的
public class BlogDTO implements Serializable {
private Long id;
@NotNull
private Instant creationDate;
@NotNull
@Size(min = 2, max = 100)
private String title;
//GETTERS, SETTERS, HASHCODE, EQUALS & TOSTRING
任何人都可以帮助修改代码,以便BlogDTO将显示帖子(而PostDTO将显示评论)。谢谢
PD:因为我更改了注释以包括PostMapper类 @Mapper(componentModel =“ spring”,使用= {PostMapper.class})
然后将@Mapping(target =“ posts”,ignore = false)设置为FALSE,但它不起作用。 API示例(Swagger)看起来不错,但是PostDTO为空(即使有数据也是如此)。
答案 0 :(得分:1)
将Set<PostDTO> posts;
添加到BlogDTO,并将Set<CommentDTO> comments;
添加到PostDTO。还要在DTO文件中为这些字段添加getter和setter。然后在您的映射器中,确保BlogMapper使用PostMapper,并且PostMapper使用CommentMapper。
您可能还需要在Blog.java的posts
字段和Post.java的comments
字段上配置缓存注释以适合您的用例。使用NONSTRICT_READ_WRITE
时,更新缓存可能会有所延迟,从而导致API返回过时的数据。