我在使用 Hibernate 从数据库中获取行时遇到问题。当我只想得到一行时,我收到了 20 行。当我想从大约 1.5k 行的表中获取所有行时,我正好收到 15.2k 行。该表的实体类具有复合主键。
这是我获取所有行的代码:
Criteria criteria = getSession().createCriteria(type);
criteria.setCacheable(true).setCacheRegion(BaseEntity.PACKAGE);
criteria.list();
这是我的实体类:
@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
}
这是MyPK
类:
@Embeddable
public class MyPK implements Serializable {
@Column(name = "qwerty")
protected String qwerty;
@Column(name = "property")
protected String property;
//constructors, getters and setters
}
MyEntity
类是带有@MappedSuperclass
注释的抽象类。这是这个类头:
@MappedSuperclass
public abstract class MyEntity<T extends Serializable>
我究竟做错了什么?有这个问题EmbeddedId
吗?
编辑#1 我已经意识到这是问题所在:
@ManyToOne
@JoinColumn(name = "property", nullable = false, insertable = false, updatable = false)
protected Option option;
此对象包含另一个表的外键。而这个另一个表引用了另一个。最后一张表有 10 行用于上一张表。结果我得到了行数量 * 10。问题可能出在我的实体中的 Hibernate 注释上。