Java Mapstruct多对一映射
我有一个关于mapstruct中@ManyTone映射的问题。我有两张桌子 第一个:Java Mapstruct多对一映射,java,hibernate,entity,dto,mapstruct,Java,Hibernate,Entity,Dto,Mapstruct,我有一个关于mapstruct中@ManyTone映射的问题。我有两张桌子 第一个: @Entity @Table(name = "members", schema = vsm) public class MemberEntity{ @Column(name = "id", nullable = false) protected Long id; @ManyToOne(optional = false) @JoinColumn(name = "case_id"
@Entity
@Table(name = "members", schema = vsm)
public class MemberEntity{
@Column(name = "id", nullable = false)
protected Long id;
@ManyToOne(optional = false)
@JoinColumn(name = "case_id", nullable = false)
private CaseEntity case;
}
第二个:
@Entity
@Table(name = "cases", schema = vsm)
public class CaseEntity {
@Column(name = "id", nullable = false)
protected Long id;
@Column(name = "description", nullable = false)
protected String description;
}
我有这样一个例子:
public class CasesDto{
protected Long id;
protected String description;
private List<MemberDto> members;
}
CasesDto mapToDto(CaseEntity entity);
我需要填写会员名单;但是我不明白怎么做。你不能这样简单地将它映射到案例。没有要映射到
列表的集合。
您应该拥有完整的案例实体,其中包括:
@OneToMany(mappedBy = "cases")
private List<MemberEntity> members = new ArrayList<>();
@Mapping(target = "members", source = "members")
CasesDto toDto(CaseEntity entity, List<MemberEntity> members);
<强>或获取具有附加查询的成员列表,并以这种方式将其合并到MasStutt中(我认为这是一个更糟糕的选择):
@OneToMany(mappedBy = "cases")
private List<MemberEntity> members = new ArrayList<>();
@Mapping(target = "members", source = "members")
CasesDto toDto(CaseEntity entity, List<MemberEntity> members);
映射(target=“members”,source=“members”)
CasesDto toDto(案例实体,列表成员);
如果您在案例实体
中添加@OneToMany(mappedBy=“case”)列表成员
,是否会有所帮助?或者这是你不想做的事?不,我不想给我的entyties添加任何新的注释。这是唯一的解决办法吗?目前,我没有任何其他想法。它要么获取太多数据,要么生成N+1
查询。如果您需要<代码>成员实体<代码> > s > CaseOngult,我会考虑添加In < Cube > CaseOngult及其另一方。您可以有这样的映射器:CasesDto mapToDto(CaseIn实体,列表成员);然后手动指定映射。