Hibernate: obtendo muitas linhas
Eu tenho problema com a obtenção de linhas do meu banco de dados usando o Hibernate. Quando eu gostaria de obter apenas uma linha, estou recebendo 20. Quando eu gostaria de obter todas as linhas da tabela com cerca de 1.5k linhas, estou recebendo exatamente 15.2k linhas. A classe de entidade dessa tabela possui chave primária composta.
Este é o meu código para obter todas as linhas:
Criteria criteria = getSession().createCriteria(type);
criteria.setCacheable(true).setCacheRegion(BaseEntity.PACKAGE);
criteria.list();
E esta é minha classe de entidade:
@javax.persistence.Entity
@Table(name = "my_table")
public class My extends MyEntity<MyPK> {
@EmbeddedId
private MyPK id;
@Column(name = "text", nullable = false)
protected String text;
@ManyToOne
@JoinColumn(name = "property", nullable = false, insertable = false, updatable = false)
protected Option option;
@Override
public MyPK getId() {
return id;
}
@Override
public void setId(MyPK id) {
this.id = id;
}
//getters and setter
}
E isso éMyPK
classe:
@Embeddable
public class MyPK implements Serializable {
@Column(name = "qwerty")
protected String qwerty;
@Column(name = "property")
protected String property;
//constructors, getters and setters
}
MyEntity
classe é classe abstrata com@MappedSuperclass
anotação. Este é o cabeçalho desta classe:
@MappedSuperclass
public abstract class MyEntity<T extends Serializable>
O que estou fazendo de errado? Este problema é comEmbeddedId
?
EDITAR # 1 Como eu percebi isso é problema com isso:
@ManyToOne
@JoinColumn(name = "property", nullable = false, insertable = false, updatable = false)
protected Option option;
Este objeto contém chave estrangeira para outra tabela. E essa outra tabela tem referência a outra. E esta última tabela tem 10 linhas para a tabela anterior. No resultado, estou obtendo um valor de linhas * 10. O problema provavelmente está na anotação do Hibernate em minhas entidades.