책에 있는 예제를 보다가 오류가 발생하여 getOne()에 대해서 한번더 공부해보려고 정리해보았습니다.
findById()
및 getOne()
메서드는 모두 기본 데이터 저장소에서 개체를 검색하는데 사용합니다.이 두 방법의 차이는 성능에 관한 것입니다.
지연로딩된 getOne() 메서드는 반환된 프록시 개체의 속성에 실제로 엑세스 할 때까지 데이터베이스에 도달하지 않으므로 JVM에서 데이터 베이스 왕복을 방지합니다.
관계(OneToOne 또는 ManyToOne)를 유지하기 위해 데이터베이스에서 엔티티를 검색하고 다른 개체에 대한 참조를 할당하려는 예제가 있습니다.
Department에 속한 Employee가 있습니다.
@Entity
@Table(name = "t_departments")
public class Department {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private String name;
@Entity
@Table(name = "t_employees")
public class Employee {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne
private Department department;
@Service
@Transactional(propagation = Propagation.REQUIRES_NEW)
public class HRService {
@Autowired
private DepartmentRepository departmentRepository;
@Autowired
private EmployeeRepository employeeRepository;
public Department createDepartment() {
Department dept = new Department();
dept.setName("Product & Engg");
return departmentRepository.save(dept);
}
public void createEmployee1(long deptId) {
final Department pne = departmentRepository.getOne(deptId);
Employee employee = new Employee();
employee.setName("Foo 1");
employee.setDepartment(pne);
employeeRepository.save(employee);
}