gpt4 book ai didi

java - JPA - 如何在不构造父对象的情况下构造 ManyToOne 关系的子对象

转载 作者:行者123 更新时间:2023-12-01 22:00:13 25 4
gpt4 key购买 nike

每次我在 DAO 中编写“创建”方法时,当对象已经存在并且我只有 id 时,我都必须使用注释 @ManyToOne 来构造对象。就像下面的例子一样。

我有 Employee 类:

@Entity  
public class Employee
{
@Id
private Long id;

private String employeeName;

@ManyToOne
private Employer employer;

...

}

在 DAO 中,我有一种方法可以使用现有雇主的 ID 创建员工。我通常是这样解决的:

public class EmployeeDAO {

...


public void createEmployee(String name, String employerId) {

Employee employee = new Employee();
employee.setName(name);

Employer employer = new Employer();
employer.setId(employerId);
employee.setEmployer(employer);

save(employee);
}

...
}

我想知道是否有一种更优雅的方法可以在不创建“new Employer()”的情况下实现此目的

最佳答案

如果您的雇主已加载到持久性上下文中,则使用您的代码,您可能会收到 NonUniqueObjectException

最好的方法是加载雇主的代理。您可以使用以下方法来做到这一点:

// for hibernate session
Employer employer = session.load(Employer.class, employerId);

// EntityManager
Employer employer = entityManager.getReference(Employer.class, employerId);

或使用JpaRepository#getOne方法(如果您使用 Spring Data)。

你可以阅读这个question以获得更多解释。

关于java - JPA - 如何在不构造父对象的情况下构造 ManyToOne 关系的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33659666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com