我有一些问题。 我有两个实体和一个DTO。
@Entity
class X {
@OneToMany
Set<Y> set;
}
@Entity
class Y {
Long id;
@ManyToOne
X x;
}
class XDTO {
Set<Long> yId;
}
在这种情况下如何实现mapper?
@Mapper
public mapper() {
XDTO toDto (X x);
X toEntity (XDTO xDTO);
}
答案 0 :(得分:1)
这样的事情应该有效:
@Mapper(uses=EntityMapper.class)
public interface XMapper() {
@Mapping(source="set", target="yId")
XDTO toDto (X x);
@InheritInverseConfiguration
X toEntity (XDTO xDTO);
}
public class EntityMapper {
EntityManager em = ...;
public <T extends BaseEntity> T resolve(long id, @TargetType Class<T> entityClass) {
entityManager.find( entityClass, id );
}
public long toReference(BaseEntity entity) {
return entity != null ? entity.getId() : null;
}
}
答案 1 :(得分:0)
根据您所描述的内容,您似乎希望实现此目标:
我提出了以下解决方案:
public Mapper{
// Returns XDTO when X entity is passed as a parameter
XDTO toDto(X x){
XDTO temp=new XDTO();
for(Y y: x.set){
temp.add(y.id)
}
return temp;
}
// Returns X entity when XDTO is passed as a parameter
X toEntity (XDTO xDTO){
Set<Y> tempSet=new HashSet<Y>();
for(Long yId:x.set){
Y ytemp=new Y();
ytemp.setId(yId);
tempSet.add(ytemp);
}
return tempSet;
}
}