如何将id的集合转换为bean的集合?

时间:2017-07-19 10:28:08

标签: java entity mapstruct

我有一些问题。 我有两个实体和一个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);
}

2 个答案:

答案 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)

根据您所描述的内容,您似乎希望实现此目标:

  1. 传递X实体时返回XDTO,
  2. 传递XDTO时返回X实体。
  3. 我提出了以下解决方案:

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