オブジェクトを持つAccount
単一のJPAクラスを含む3つのJPAクラスがありますAddress
City
public class Account implements java.io.Serializable {
// Fields
private Address address;
//Setters and getters for other fields
@OneToOne(fetch = FetchType.LAZY, mappedBy = "account")
public Address getAccountAddress() {
return this.address;
}
public void setAccountAddress(Address address) {
this.address = address;
}
public class Address implements java.io.Serializable {
// Fields
private City city;
//Setters and getters for other fields
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CityId", nullable = false)
public City getCity() {
return this.city;
}
N+1 選択の問題を解決したかったので、クラスの上で @BatchSize を使用しようとしましたが、データベースへの N+1 呼び出しを停止しなかったため、自分で batchSize を設定する必要がありましたpersistence.xml
<property name="hibernate.default_batch_fetch_size" value="50" />
<property name="hibernate.jdbc.batch_size" value="50" />
である1つのエンティティを除いて機能するAddress
ようになったので、都市とアカウントに対して1つのSQL選択を取得しますが、住所に対してはまだN SQL選択を取得します。唯一の違いは、アカウントとアドレスの関係が 1 対 1 であることです。
私の質問は次のとおりです。
- 1 対 1 の関係が、テーブル Address でまだ N を選択している理由でしょうか? なぜ?
- 注釈が機能しないのはなぜですか (なぜ に
persistence.xml
設定する必要があったのですか)、注釈を有効にするために行うべき設定はありますか?