首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >注释@BatchSize不工作

注释@BatchSize不工作
EN

Stack Overflow用户
提问于 2013-09-16 08:40:59
回答 1查看 3K关注 0票数 1

我有3个JPA类--一个Account,它包含一个Address,其中有一个City对象

代码语言:javascript
复制
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;
}

代码语言:javascript
复制
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

代码语言:javascript
复制
 <property name="hibernate.default_batch_fetch_size" value="50" />
 <property name="hibernate.jdbc.batch_size" value="50" />

现在,除了一个实体(即Address )外,它还能工作,因此我为City和Account获得了一个select,但我仍然获得了N用于Address。我注意到,唯一的区别是帐户和地址之间的关系是一对一的。

我的问题是:

  1. 关系一对一能成为我在表地址上得到N个选择的原因吗?为什么?
  2. 为什么注释不起作用(为什么我必须在persistence.xml中设置它),为了使注释有效,是否应该做一些设置?
EN

回答 1

Stack Overflow用户

发布于 2013-10-18 15:12:50

  1. Hibernate可空(可选) OneToOne不能懒惰。有很多关于这个问题的文章和一些解决办法。例如阅读这个Making a OneToOne-relation lazy
  2. 你把@BatchSize放在哪门课上了?您应该将其放在City类之上。还尝试了@BatchSize以上的方法getCity()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18823736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档