Pessoal Boa Noite! Como estou começando no assunto perdoe-me se falar alguma bobeira…
Seguinte estou com o seguinte senário de testes simples, uma classe que tem duas listas populo a lista e gravo no banco normalmente, busco por id normalmente, porem quando filtro mais de um objeto a lista de retorto deste objeto pesquisado vem duplicada, vou expor abaixo.
Que puder ajudar desde já agradeço, pois não sei se estou erando em mapeamento, criteria ou outra coisa… a todos muito obrigado!!
Classe:
@Entity
@Table(name = "animais")
public class AnimalTO {
@Id
@GeneratedValue
@Column(unique = true)
private Integer id;
@CollectionOfElements(fetch = FetchType.EAGER)
private Set<String> alergias;
@CollectionOfElements(fetch = FetchType.EAGER)
private Set<String> doencas;
// gets sets
}
Gravo no Banco 2 Animais com 2 itens em cada lista:
AnimalTO animalTO = new AnimalTO();
AnimalDAO animalDAO = new AnimalDAO();
animalTO.setAlergias(new HashSet<String>());
animalTO.getAlergias().add("ALERGIA 1");
animalTO.getAlergias().add("ALERGIA 2");
animalTO.setDoencas(new HashSet<String>());
animalTO.getDoencas().add("DOENCA 1");
animalTO.getDoencas().add("DOENCA 2");
try {
animalDAO.saveOrUpdate(animalTO);
} catch (Exception e) {
e.printStackTrace();
}
Grava tudo certo no banco porem quando recupero do banco traz duplicados:
DAO:
public List<AnimalTO> listarTodos(AnimalTO animalTO) throws Exception {
Session sessao = null;
List<AnimalTO> lista = new ArrayList<AnimalTO>();
try {
sessao = HibernateUtil.getSessionFactory().openSession();
Criteria criteria = sessao.createCriteria(AnimalTO.class);
criteria.addOrder(Order.asc("id"));
lista = (ArrayList<AnimalTO>) criteria.list();
} catch (Exception e) {
lista = null;
e.printStackTrace();
} finally {
sessao.close();
}
return lista;
}
Busca:
try {
AnimalDAO animalDAO = new AnimalDAO();
int cont = 0;
for (AnimalTO to : animalDAO.listarTodos(new AnimalTO())) {
System.out.println("\n######################## - Indice: " + cont);
System.out.println("Id animal: " + to.getId());
System.out.println("\n - Doencas");
for (String s : to.getDoencas()) {
System.out.println(s);
}
System.out.println("\n - Alergias");
for (String s : to.getAlergias()) {
System.out.println(s);
}
System.out.println("\n########################");
cont++;
}
System.out.println("Numero de Animais Retornados: " + cont);
} catch (Exception e) {
e.printStackTrace();
}
}
Rertono da busca:
######################## - Indice: 0
Id animal: 1
- Doencas
DOENCA 1
DOENCA 2
- Alergias
ALERGIA 1
ALERGIA 2
########################
######################## - Indice: 1
Id animal: 1
- Doencas
DOENCA 1
DOENCA 2
- Alergias
ALERGIA 1
ALERGIA 2
########################
######################## - Indice: 2
Id animal: 1
- Doencas
DOENCA 1
DOENCA 2
- Alergias
ALERGIA 1
ALERGIA 2
########################
######################## - Indice: 3
Id animal: 1
- Doencas
DOENCA 1
DOENCA 2
- Alergias
ALERGIA 1
ALERGIA 2
########################
######################## - Indice: 4
Id animal: 2
- Doencas
DOENCA 1
DOENCA 2
- Alergias
ALERGIA 1
ALERGIA 2
########################
######################## - Indice: 5
Id animal: 2
- Doencas
DOENCA 1
DOENCA 2
- Alergias
ALERGIA 1
ALERGIA 2
########################
######################## - Indice: 6
Id animal: 2
- Doencas
DOENCA 1
DOENCA 2
- Alergias
ALERGIA 1
ALERGIA 2
########################
######################## - Indice: 7
Id animal: 2
- Doencas
DOENCA 1
DOENCA 2
- Alergias
ALERGIA 1
ALERGIA 2
########################
Numero de Animais Retornados: 8