2017-05-22 2 views
0

3 개의 테이블을 조인해야하는 경우가 있습니다. 상황은 아래와 같습니다.최대 절전 모드에서 다중 테이블 조인

  1. 자산 테이블.
  2. 트랜잭션 테이블.
  3. 직원 표. 지금

,

는 a) 저작물 여러 트랜잭션을 가질 수는 OneToMany의 관계가있다.
b) 하나의 트랜잭션은 하나의 Employee에만 속할 수 있으므로 일대일로 관계를 유지할 수 있습니다.

-> 나는 한 명의 직원에 대한 자산 목록을 얻어야합니다.

내 스키마입니다 : 내가 가입하고 쿼리를 실행하면

a) AssetTbl: 

@Id 
@ColumnName("ASSETID") 
int assetId; 

@OneToMany() 
@JoinColumn(name="ASSET_ID",referncedColumnName="AssetId") 
List<TransactionTbl> trans; 

b) TransactionTbl: 

@Id 
@ColumnName("TRANS_ID") 
int transId; 

@ColumnName("ASSET_ID") 
int assetId; 

@OneToOne() 
@JoinColumn(name="Emp_ID",referncedColumnName="Emp_Id") 
EmployeeTbl emp; 

c) EmployeeTbl: 

@Id 
@ColumnName("Emp_ID") 
int empId; 

그것이 employeeTbl이 AssetTbl에 존재하지 않는 예외를 제공합니다. 내 스키마에 문제가 있습니까?

+0

, 왜 당신은 OneToOne를 사용합니까? 왜 자산에 대한 ManyToOne 대신 Transaction의 자산 ID를 저장합니까? 그리고 물론 예외 스택 추적과 그 원인이되는 코드를 게시하는 것이 어떻습니까? –

답변

1

AssetTbl에 transactionId가 있다고 생각합니다. 트랜잭션 테이블에 employeeId가 참조로 있습니다.

emp의 자산을 얻으려면 아래 쿼리를 찾으십시오. 자산이 많은 트랜잭션이있는 경우

@Query("select assetTbl from AssetTbl as assetTbl 
inner join assetTbl.trans as trans 
inner join trans.emp as emp 
where emp.empId = :empId) 

또는

<query name="findAssetByEmployee"> 
    <query-param name="empId" type="long"/> 
    select assetTbl from AssetTbl as assetTbl 
    inner join assetTbl.trans as trans 
    inner join trans.emp as emp 
    where emp.empId = :empId 
</query> 
관련 문제