2017-07-19 82 views
1

我有一些問題。 我有兩個實體和一個DTO。如何將id的集合轉換爲bean的集合?

@Entity 
class X { 
    @OneToMany 
    Set<Y> set; 
} 

@Entity 
class Y { 
    Long id; 
    @ManyToOne 
    X x; 
} 

class XDTO { 
    Set<Long> yId; 
} 

如何在這種情況下實現映射器?

@Mapper 
public mapper() { 

    XDTO toDto (X x); 
    X toEntity (XDTO xDTO); 
} 

回答

0

從你所描述的東西,它看起來像你想實現這一點:

  1. 當X實體傳遞返回XDTO和,
  2. 返回X實體時XDTO傳遞。

我想出了以下解決方案:

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