注释@BatchSize不起作用



我有 3 个 JPA 类,一个Account包含一个具有City对象的Address

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 调用,因此我必须在persistence.xml中设置 batchSize

 <property name="hibernate.default_batch_fetch_size" value="50" />
 <property name="hibernate.jdbc.batch_size" value="50" />

现在它工作,除了一个Address的实体,所以我为城市和帐户选择一个 SQL,但我仍然为地址选择 N 个 SQL。我注意到唯一的区别是帐户和地址之间的关系是一对一的

我的问题是:

  1. 一对一的关系可以成为我仍然在表上选择N个地址的原因吗? 为什么?
  2. 为什么
  3. 注释不起作用(为什么我必须在 persistence.xml 中设置它),是否应该进行一些设置才能使注释有效?
  1. 休眠可为空(可选) 一对一不能懒惰。有很多关于此问题的文章和一些解决方法。例如,阅读此内容 使一对一关系变得懒惰

  2. 你把哪些类放在上面@BatchSize?您应该将其放在City类之上。也尝试@BatchSize上面的方法getCity();

最新更新