Mapowanie DAO na DTO

0

Cześć, mam problem z mapowaniem DAO na DTO w javie za pomocą mapstruct. Próbuję zmapować w następujący sposób:

Mapper:

@Component
@Mapper(componentModel = "spring")
public interface AnimalMapper {
    @Mapping(target = "commentPoster", source = "animal.commentsWithCommenters.commentPoster")
    @Mapping(target = "commentContent", source = "animal.commentsWithCommenters.commentContent")
    AnimalResponse toResponse(Animal animal);
}

DTO

@Getter
@Setter
@NoArgsConstructor
public class AnimalResponse {
    private Long id;
 
    private String name;
 
    private String description;
 
    private Integer age;
 
    private String photoLink;
 
    private Boolean isAnimalOnTheWalk;
 
    private String commentPoster;
 
    private String commentContent;
}

DAO

@Entity
@Table(name = "animal")
@Data
public class Animal {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String name;
 
    private String description;
 
    private Integer age;
 
    private String photoLink;
 
    private Boolean isAnimalOnTheWalk;
 
    private String usernameOfThePersonOnTheWalk;
 
    @OneToMany(mappedBy = "animal")
    private List <Comment> commentsWithCommenters;
}

Comment

@Entity
@Table(name = "comment")
@Data
public class Comment {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String commentPoster;
 
    private String commentContent;
 
    @ManyToOne(fetch = FetchType.LAZY)
    @NotNull
    @JoinColumn(name = "zwierze_id")
    private Animal animal;
}

I otrzymuję taki błąd:

21:20
java: The type of parameter "animal" has no property named "commentsWithCommenters.commentPoster".

Ktoś wie co może być przyczyną?

1

Nie lepiej użyć wzorca "builder" i napisać ręcznie klasę mapującą (łatwiejsze w debugowaniu i mniej narażone na "dziwnę" błędy w przypadku wykorzystywania adnotacji)

0

To co robisz jest złe. Nie powinieneś używać takich wynalazków. Możliwe, że chcesz się tego nauczyć, bo w aplikacjach jest tego mnóstwo, i wtedy to nie Twoja wina.

Jeżeli nie ma jakichś problemów z nazewnictwem to pewnie uderzyłeś w jeden z problemów opisanych tutaj https://stackoverflow.com/questions/63034956/mapstruct-no-property-named-packaging-exists-in-source-parameters

Pokaż cały serwis na Githubie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1