Hibernate を使用してデータベースから行を取得する際に問題があります。1行だけ取得したい場合、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 アノテーションにある可能性があります。