2013-07-12 3 views
0
I have 2 tables : Employee and Department (many to one relationship) 

My pojos look like this: 

@Entity 
@Table(name = "employee") 
class Employee { 

@Id 
private String employeeId; 

@ManyToOne(cascade = CascadeType.ALL) 
@JoinTable(name = "department", joinColumns = @JoinColumn(name = "university_id")) 
private Department department; 

} 

@Entity 
@Table(name = "department") 
class Department { 

@Id 
private String deptId; 

private String universityId; 

} 

그래서 기본적으로 Employee 객체로드/얻을 때, 그것은 university_id를 사용하여 데이터 멤버 부서를로드해야합니다 (고유하지 않을 수 있습니다) 기본 키 dept_id가 아니라 조인의 경우. 특수 효과를 사용하여이를 어떻게 수행 할 수 있습니까?고유하지 않은 컬럼에 데이터 멤버 매핑과 하이버 네이트 POJO를 만드는 방법

나는 내가해야할 일이 무엇인지 알 수 있도록 최대 절전 모드로 전환했다. 문제 요약 : 기본 키나 다른 POJO의 고유 한 열 이외의 열을 사용하여 개체를로드하는 방법은 무엇입니까?

답변

0

OneToMany, ManyToOne 의미는 주 - 외래 키입니다. 당신은 외국이 아닌 다른 열에 두 테이블을 조인하려고합니다.

오히려 where 절을 사용하여 내부 조인을 사용하려고합니다. 순수한 SQL에서는 그랬을 것입니다.

select * from Employee e inner join Department d on e.employeeId = d.deptId where universityId = ? 

HQL

from Employee e inner join fetch e.department d where d.universityId = ? 

귀하의 ID는 조금 이상한 숫자 없습니다.

기준 빌더 또는 명명 된 쿼리를 사용하여 쿼리를 수행 할 수 있습니다. 오늘 대학 ID 검색을 다른 컬럼으로 제한하고 싶습니다. 주석으로이 작업을 계속할 수 없습니다. 특수 효과 매퍼는이 용도로 사용되지 않습니다.

희망이 도움이됩니다.