ORM (장기 수명 프로젝트보기)에서 관계를 사용하는 가장 좋은/일반적인 솔루션 (모범 사례)은 무엇입니까?ORM에서의 관계 작업
1) 예 : Oracle HR 스키마가 있습니다. 가능한 모든 객체 (엔티티) 사이의 관계를 만들거나 지금 실제로 필요로하는 (그리고 미래에 변경되는) 객체 사이의 관계 만 만들 수 있습니까?
@Entity
public class Employee {
@Id
private long employeeId;
@ManyToOne((fetch = FetchType.LAZY)
private Job job;
}
@Entity
public class Job {
@Id
private String jobId;
@OneToMany(fetch = FetchType.LAZY)
private List<Employee> employeeList;
}
2) 기존 또는 새로운 작업으로 새로운 직원을 어떻게 저장해야합니까?
@Entity
public class Employee {
@Id
private long employeeId;
private String jobId;
@ManyToOne((fetch = FetchType.LAZY)
private Job job;
}
마다 두 매개 변수 설정 최악의 솔루션 :
Job job = new Job();
job.setJobId("JOB_01");
Employee employee = new Employee();
employee.setEmployeeId(1L)
employee.setJobId(job.getJobId());
조금 더 나은 솔루션입니다 재 구현 setJobId()을 우리는 문자열 작업 ID와 직원 엔티티와도 생성 관련 작업 작업 변수가 당신이 연결을 필요로하지 않는 경우
public void setJobId(String jobId) {
if (getJob() == null) {
this.jobId = jobId;
job = new Job();
job.setJobId(jobId);
} else {
this.jobId = getJob().getJobId();
}
}
답변을 주셔서 감사합니다. – Ziletka
그리고 새로운 직원을 기존 작업과 함께 저장하는 좋은 해결책이 있습니까? 왜냐하면 job.setJobId ("AC_ACCOUNT")와 employee.setJob (job)을 호출 할 때 시스템은 새로운 작업을 저장하거나 기존 작업을 업데이트하려고 시도하기 때문입니다. – Ziletka
데이터베이스 (em.find 또는 em.getReference 또는 session.get 또는 session.load)를 사용하여 주어진 ID로 작업을 가져 와서이 작업을 직원에게 설정하십시오. –