我一直在玩 JPA,遇到了这种情况,想知道如何解决这个问题。
我有 2 个表,即公司和员工。
所以这里一个员工只能为1家公司工作,因此@OneToOne单向映射是在Employee类中完成的。公司表中的公司详细信息已经存在。
因此,当我尝试将记录插入 Employee 表时,我什至创建对公司的引用,将其添加到 Employee 类并使用 EmployeeRepository 的 save 方法保存它。由于 company_id 已经存在于 Company 表中,因此应该仅引用它而不是创建新公司。但这并没有发生。
我得到一个异常说company object is still in the transient state.
我可以通过添加来解决这个问题CascadeType.All
但我不需要插入公司,而只需将公司与员工联系起来。
这是代码片段。
员工阶层
@Entity
@Table(name = "employee")
@Setter
@Getter
public class Employee
{
@Id
@GeneratedValue
private Long id;
@Column(name = "employee_id")
private Integer employeeId;
@Column(name = "employee_name")
private String employee_name;
@OneToOne
@JoinColumn(name = "company_id")
private Company company;
}
公司类
@Entity
@Table(name = "company")
@Setter
@Getter
public class Company
{
@Id
@GeneratedValue
@Column(name = "company_id")
private Long id;
@Column(name = "company_name")
private String companyName;
}
公司表
company_id company_name
1 Dell
2 Apple
3 Microsoft
这是我创建 Employee 对象的方法
Employee emp = new Employee();
emp.setEmployeeId(10);
emp.setEmployeeName("Michael");
Company company = new Company();
company.setId(1);
emp.setCompany(company);
employeeRepository.save(emp);
请有人让我知道如何将公司类别链接到员工类别,而不是再保存一家公司。