代码之家  ›  专栏  ›  技术社区  ›  Mike

如何使用jhipster映射mapstruct中的对象引用?

  •  0
  • Mike  · 技术社区  · 6 年前

    假设您使用这样的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创建您的博客、帖子和评论实体,并假设您不希望在博客中填充帖子或带有评论的帖子,因此您的bloggmapper将如下所示:

    @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;
        }
    }
    

    像这样的博客:

    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显示注释)吗?谢谢

    因为我把注释改为包含Postmapper类 @映射器(componentmodel=“spring”,使用postmapper.class)

    而@mapping(target=“posts”,ignore=false)为false,但不起作用。API示例(swagger)看起来不错,但postdto为空(即使数据在那里)。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jon Ruddell    6 年前

    添加一个 Set<PostDTO> posts; 去你的博客 Set<CommentDTO> comments; 致您的邮箱。还为DTO文件中的这些字段添加getter和setter。然后在映射器中,确保blogmapper使用postmapper,postmapper使用commentmapper。

    您可能还需要在 posts blog.java和 comments java中的字段以适合您的用例。用 NONSTRICT_READ_WRITE ,可能会延迟更新缓存,导致API返回过时的数据。