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));
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) (왜 LAZY 로딩을 써야할까?) (1)Proxy는 이 글의 주제인 즉시로딩과 지연로딩을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시로딩과 지연로딩이 무엇인지에 대해 먼저 알아보자. 눈 여겨 볼 곳은 'fetch = FetchType.EAGER...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.