【发布时间】:2017-08-13 14:14:36
【问题描述】:
用户类
@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);
}
}
当我获取用户列表时,会给我这个 json(我使用 userRepository.findAll(); 获取它们):
{
"id": "4028ab6a5ddbc746015ddbc776580003",
"createdAt": "13/08/2017",
"updatedAt": "13/08/2017",
"email": "asd@asd.com",
"name": null,
"surname": null,
"lastLogin": null,
"fortuneTeller": {
"id": "4028ab6a5ddbc746015ddbc7766f0006",
"createdAt": "13/08/2017",
"updatedAt": "13/08/2017",
"totalFortune": 0,
"price": 0,
"reviews": [
{
"id": "4028ab6a5ddbc746015ddbc776710007",
"createdAt": "13/08/2017",
"updatedAt": "13/08/2017",
"content": "asd",
"rating": 0
}
]
},
"isFortuneTeller": 1
}
延迟加载不适用于 OneToOne 或 OneToMany。可能是什么问题?我认为这是因为来自 Lombok 的 @Data 注释并将它们转换为 @Getter/Setter,但仍然相同。
【问题讨论】:
-
你是怎么得到这个 json 的?
-
正如我所说的
userRepository使用RestController扩展CrudRepository。 -
执行findAll时,查看生成的sql,有没有看到join?
-
没有。它创建另一个选择来获取数据。
-
获取算命先生?
标签: java hibernate jpa spring-boot lazy-loading