Pergunta

Aqui está a versão simplificada do meu código:

@Entity
public class Item implements Serializable{

@Id
@GeneratedValue
private long id;

@ElementCollection(fetch=FetchType.EAGER ,targetClass=Cost.class)
@CollectionTable(name="ItemCost", joinColumns = {@JoinColumn(name="itemId")})
private Set<Cost> costs= new HashSet<Cost>();

@ElementCollection(fetch=FetchType.EAGER ,targetClass=ItemLocation.class)
@CollectionTable(name="ItemLocation", joinColumns = {@JoinColumn(name="itemId")})
private Set<ItemLocation> itemLocations;

}

O código acima é permitido?Tenho duas classes incorporáveis, Cost e ItemLocation, que estou usando com @ElementCollection.

Emitir:Quando tento executar uma consulta nomeada

@NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i")

Eu tenho um comportamento estranho.Os registros na segunda coleção de elementos (tabela ItemLccation) estão sendo duplicados (inseridos na tabela).

Foi útil?

Solução

No que diz respeito ao JPA 2.0, seu código é permitido.É perfeitamente legal ter mais de uma coleção anotada com ElementCollection.Além disso, provavelmente não tem nada a ver com o problema que você tem.Aliás, para descobrir se esse é realmente o seu problema, você já tentou seu código sem cobrança de custos?

Em que ponto exatamente as duplicatas nesta coleção ocorrem pela primeira vez?Se ItemLocation não definir equals&hashcode, duplicatas podem facilmente surgir como resultado da adição de itens por você mesmo.

Possivelmente você está enfrentando este problema: Chaves primárias em CollectionTable e alterar o tipo para listar e adicionar @OrderColumn ajudará.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top