【发布时间】:2021-11-03 13:25:41
【问题描述】:
我的项目中有实体(基于Spring-Boot + Hibernate):
@Entity
@Table(name = "user_account")
public class UserAccount {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@NotNull
@Column(name = "username")
private String userName;
@NotNull
@Column(name = "first_name")
private String firstName;
@NotNull
@Column(name = "last_name")
private String lastName;
@NotNull
@Column(name = "password")
private String password;
@CreationTimestamp
@Column(name = "birthday")
private LocalDateTime birthday;
@NotNull
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "role", referencedColumnName = "id")
private UserRole role;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "userAccount", cascade= CascadeType.ALL)
private Set<RentInfo> rents;
}
和
@Entity
@Table(name = "rent_info")
public class RentInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@NotNull
@ManyToOne(cascade= CascadeType.ALL)
@JoinColumn(name="user_id")
private UserAccount userAccount;
@CreationTimestamp
@Column(name = "start_date")
private LocalDateTime startDate;
@CreationTimestamp
@Column(name = "end_date")
private LocalDateTime endDate;
@Column(name = "status")
private int status;
}
我想创建双向的一对多关系,当一个用户可以有多个租金并且我们可以通过具体的 user_id 选择租金时,但出现问题
作为回应,我得到了这个:
{
"id": 1,
"userName": "test@mail.loc",
"firstName": "fName",
"lastName": "lName",
"password": "test",
"birthday": "2001-11-03T14:28:14",
"role": {
"name": "CLIENT"
},
"rents": [
{
"userAccount": {
"id": 1,
"userName": "test@mail.loc",
"firstName": "fName",
"lastName": "lName",
"password": "test",
"birthday": "2001-11-03T14:28:14",
"role": {
"name": "CLIENT"
},
"rents": [
{
"userAccount": {
"id": 1,
"userName": "test@mail.loc",
"firstName": "fName",
"lastName": "lName",
"password": "test",
"birthday": "2001-11-03T14:28:14",
"role": {
"name": "CLIENT"
}
.....
这是无限的,逻辑上我有内存不足错误。我怎样才能解决这个问题?我做错了什么?
【问题讨论】:
-
@OneToMany关系默认是惰性的。仅将fetch = FetchType.LAZY用于@ManyToOne
标签: java spring spring-boot hibernate