我有3个JPA类Account
,其中包含一个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;
}
persistence.xml
我想解决N + 1选择问题,我尝试在类之上使用@BatchSize,但它没有停止对数据库的N + 1调用,因此我不得不在{{1}中设置batchSize }}
<property name="hibernate.default_batch_fetch_size" value="50" />
<property name="hibernate.jdbc.batch_size" value="50" />
现在它的工作除了Address
之外的一个实体,所以我为City和Account获得一个SQL选择,但我仍然得到N SQL select for Address。我注意到唯一的区别是账户和地址之间的关系是一对一的
我的问题是:
persistence.xml
中设置它),是否应该进行一些设置以使注释有效?答案 0 :(得分:2)
Hibernate可以为空(可选)OneToOne不能是懒惰的。有很多关于这个问题的文章和一些解决方法。例如。阅读此Making a OneToOne-relation lazy
您在哪个课程@BatchSize
之上?你应该把它放在City
类之上。同时在方法@BatchSize
;
getCity()
醇>