Friday, March 24, 2017

JPA Retornando Elementos Duplicados na Collection

Recentemente (utilizando JPA 2.1 e hibernate 4.3) descobri que uma coleção mapeada para um tipo simples (incluindo Strings e Wrappers) poderia retornar elementos duplicados após uma consulta, sem motivo aparente. Por exemplo:
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "entity_items",
                     joinColumns = {@JoinColumn(name = "id_entity")})
@Column(name = "item_description")
private List<String> items;
retornava cada item da lista repetido 7 vezes, embora as linhas da tabela no banco de dados continuavam como deveriam.

2 Soluções

Ao remover FetchType.EAGER do mapeamento, a coleção volta a exibir os items normalmente.

Outra alternativa que também funciona é utilizar a interface Map (que remove duplicados instantaneamente) ao invés de List. O inconveniente de Map, se você estiver usando Java Server Faces, é que você não poderá acessar seus elementos da view, pelo menos não diretamente!


No comments:

Post a Comment