【发布时间】:2021-08-31 11:21:34
【问题描述】:
我有一个简单的模型,其中包含 Employee 和 Company 对象。
我们的目标是简单地获得一份员工名单及其所在公司的名单,以及一份公司名单及其员工。
代码属于抛出无限递归调用(stackloverflow)引起的异常。由于一个关系 EARGLY 和其他 LAZYLY 获取关系,我无法理解它发生的原因。获取哪些数据(Company.findAll 或 Employee.findAll)并不重要
这是我项目中使用的数据库和实体配置:
关系是:
ONE Company has MANY Employees.
MANY Employees have (work for) ONE Company
所有者方是 Employee(它是对 Company 具有 FK 的表),基于这样的想法:“没有公司就没有员工,但相反的情况可能是真的”。
我理解实体所有权的方式是这样的: Employee 拥有关系,所以,当我们 fecth employee 数据时,它也会获取它所属的 company (ManyToOne),但是当我们 fecth company > 数据,员工(OneToMany)将不会被获取。
员工实体类:
@Entity
@Table(name = "employee")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EmployeeEntity {
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@ManyToOne
@JoinColumn(name = "company_id", nullable = false)
private CompanyEntity company;
}
公司实体类:
@Entity
@Table(name = "company")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CompanyEntity {
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "company")
private Set<EmployeeEntity> employees = new HashSet<>();
}
表格:
CREATE TABLE Company (
id INT NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE Employee (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
company_id INT NOT NULL,
);
ALTER TABLE Employee
ADD FOREIGN KEY (company_id)
REFERENCES company (id);
最终目标是让它在两个方面都发挥作用。
【问题讨论】:
标签: java hibernate jpa one-to-many many-to-one