Hibernate One to One

2465 단어 Hibernate
그동안 다 대 일 로 일대일 이라도 다 대 일 로 전환 해 해결 해 왔 다.오늘 못 도망 가.
다 대 일 관련 관계 설정 에 있어 서 양쪽 에 1 대 1 과 1 대 1 로 배치 하면 됩 니 다.그런데 1 대 1 일 때 양쪽 이 모두 @ OneToOne 이 었 습 니 다. 그러면 이 버튼 은 과연 어느 시계 안에 들 어 갈 까요?물론 실제 적 으로 어느 시계 에 넣 어도 합리적이다.하지만 하 이 버 네 이 트 설정 에 서 는 어떤 표 에 있 는 지 확인 해 야 합 니 다.JPA 공식 문서 에 다음 과 같은 설명 이 있 습 니 다.
mappedBy
public abstract java.lang.String mappedBy

(Optional) The field that owns the relationship. This element is only specified on the inverse (non-owning) side of the association.
어느 쪽 이 inverse 인지 mappedBy 를 설정 하면 된다 는 뜻 입 니 다. 그러면 외부 키 는 inverse 가 아 닌 쪽 이 대응 하 는 표 에 생 긴 다 는 뜻 입 니 다.
직원 (Employee) 과 임금 정보 (Salary Info) 를 예 로 들 면 외부 키 가 임금 정보 표 에 나타 나 기 를 바 랍 니 다.
직원:
@Entity
@Table(name = "core_employee")
public class Employee {
   private SalaryInfo salaryInfo;
	@OneToOne(mappedBy="empNo")
	public SalaryInfo getSalaryInfo() {
		return salaryInfo;
	}
...
}
   

급여 정보:
@Entity
@Table(name = "sal_salary_info")
public class SalaryInfo {
	private Employee emp;
	@OneToOne(cascade=CascadeType.ALL,targetEntity=Employee.class)
	@JoinColumn(name = "emp_no", nullable = false)
	public Employee getEmp() {
		return this.emp;
	}
...
}

또한, Hibernate 의 Criteria 조회 에 서 는 다음 코드 와 같은 복잡 한 대상 의 비 교 를 지원 하지 않 습 니 다.
Criteria criteria = getSession().createCriteria(Employee.class);
		criteria.add(Restrictions.isNull("salaryInfo"));

임금 정보 가 없 는 직원 을 조회 하려 는 의 도 는 조 회 를 수행 할 때 다음 과 같은 문구 가 생 긴 다.
select * 
		from employee emp
		inner join salaryinfo s on s.emp_no=emp.emp_no
		where emp.emp_no is null

이상 하 게 왜 조건 이 emp. empno is null。다음 형식 으로 써 야 합 니 다.
Criteria criteria = getSession().createCriteria(Employee.class);
		criteria.add(Restrictions.isNotNull("salaryInfo.id"));

isNotNull 을 제외 한 모든 방법 은 같은 이치 입 니 다. 복잡 한 유형의 속성 을 비교 할 때 안에 있 는 속성 을 눌 러 야 정확 한 sql 조회 조건 을 만 들 수 있 습 니 다.
위의 코드 는 지금까지 결 과 를 정확하게 조회 할 수 없다.Criteria 의 기본 표 연결 방식 은 inner join 이기 때문에 이러한 연결 방식 으로 인해 임금 정 보 를 찾 지 못 한 직원 기록 도 조회 결과 에 나타 나 지 못 합 니 다.설명 표 연결 방식 을 표시 해 야 합 니 다:
Criteria criteria = getSession().createCriteria(Employee.class);
		criteria.add(Restrictions.isNotNull("salaryInfo.id",JoinType.LEFT_OUTER_JOIN));
		

좋은 웹페이지 즐겨찾기