如何使用Dozer将一组o整数映射到一组对象?

时间:2017-02-15 14:01:32

标签: java hibernate dozer

我有一组整数,我从db获得了hibernate

@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "artigo_idioma", joinColumns=@JoinColumn(name="id_artigo"))
@Column(name = "id_idioma")
@Fetch(FetchMode.JOIN)
private Set<Integer> idiomas;

由于性能问题,我无法在数据库中获取整个对象,也不会使用延迟提取。但是我想使用Dozer将所有的ID映射到真正的POJO,所以当我需要整个对象时,我可以通过我已经拥有的Id获得它。

1 个答案:

答案 0 :(得分:0)

我解决了为Set

实现自定义推土机的问题
public class SetIdIdiomaToSetIdioma extends DozerConverter<Set, Set>{


public SetIdIdiomaToSetIdioma() {
    super(Set.class, Set.class);
}

@Override
public Set<Idioma> convertFrom(Set ids, Set idiomas) {
    if(ids != null && ids.size() > 0){
        idiomas = new HashSet<Idioma>();
        for (Object object : ids) {
            if(object.getClass().equals(Integer.class)){
                Integer id = (Integer) object;
                if(id != null){
                    Idioma idioma = new Idioma();
                    idioma.setIdIdioma(id);
                    idiomas.add(idioma);
                }
            }
        }
    }

    return idiomas;
}

@Override
public Set<Integer> convertTo(Set idiomas, Set ids) {
    if(idiomas != null && idiomas.size() > 0){
        ids = new HashSet<Integer>();
        for (Object object : idiomas) {
            Idioma idioma = (Idioma) object;
            if(idioma != null && idioma.getIdIdioma() != null)
                ids.add(idioma.getIdIdioma());
        }
    }
    return ids;
}


}

一旦完成,我就有了一套我想要的对象,如果需要,我可以在db中搜索提供aditional数据的id。