2017-07-19 1 views
1

J'ai un problème. J'ai deux entité et un DTO.Comment convertir la collection d'ID en collection de beans?

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

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

class XDTO { 
    Set<Long> yId; 
} 

Comment implémenter le mappeur dans cette situation?

@Mapper 
public mapper() { 

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

Répondre

0

D'après ce que vous avez décrit, il semble que vous voulez atteindre cet objectif:

  1. Retour XDTO quand entité X est passée et,
  2. Retour entité X lorsque XDTO est passé.

je suis venu avec la solution suivante:

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

Quelque chose comme cela devrait fonctionner:

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