Java Hibernate@OneToOne(fetch=FetchType.LAZY)不工作
用户类Java Hibernate@OneToOne(fetch=FetchType.LAZY)不工作,java,hibernate,jpa,spring-boot,lazy-loading,Java,Hibernate,Jpa,Spring Boot,Lazy Loading,用户类 @Entity @Getter @Setter @NoArgsConstructor @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) public class User extends BaseDomain { @Column(unique=true) private String email; private String name; private String surna
@Entity
@Getter
@Setter
@NoArgsConstructor
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class User extends BaseDomain {
@Column(unique=true)
private String email;
private String name;
private String surname;
@JsonIgnore
private String password;
// fortune types
@OneToOne(fetch = FetchType.LAZY)
private FortuneTeller fortuneTeller;
private int isFortuneTeller; // for efficient searching
@Override
public boolean equals(Object o) {
return super.equals(o);
}
@Override
public String toString() {
return "User{} " + super.toString();
}
}
算命先生:
@Entity
public class FortuneTeller extends FortuneCapability {
@Override
public String toString() {
return super.toString();
}
@Override
public boolean equals(Object o) {
return super.equals(o);
}
}
能力:
@Entity
@NoArgsConstructor
@Getter
@Setter
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class FortuneCapability extends BaseDomain {
private int totalFortune;
private int price;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "fortuneCapability")
private List<Review> reviews = new ArrayList<>();
public void addReview(Review review) {
review.setFortuneCapability(this);
reviews.add(review);
}
@Override
public String toString() {
return super.toString();
}
@Override
public boolean equals(Object o) {
return super.equals(o);
}
}
延迟加载对OneToOne或OneToMany都不起作用。有什么问题吗?我认为这是因为Lombok的@Data
注释,并将它们转换为@Getter/Setter
,但仍然是一样的
另外。序列化时,Jackson将调用getter方法,该方法将使用其代理检索延迟加载的对象。 如果您检查生成的sql,您将看到没有根据findAll上的用户id检索fortune_功能,如果抓取是急切的,您将看到如下sql
Hibernate: select fortunet_capability ......... where fortunet_capability [some generated text].user_id=?
你是如何得到这个json的?正如我通过
userRepository
所说的,它使用RestController
扩展了crudepository
。执行findAll时,检查生成的sql,你看到一个连接了吗?没有。它创建了另一个选择来获取数据。获取算命师?基于你的帮助进行了一点搜索后,我发现我的问题是由Jackson library引起的。()
Hibernate: select fortunet_capability ......... where fortunet_capability [some generated text].user_id=?