2014-12-17 3 views
0

나는 꽤 큰 것을 잃어 버렸다고 생각하지만 내게는 최대 절전 모드가 매우 제한적으로 보인다.최대 절전 모드에서 복합 키의 where 절

나는 다음과 같은 테이블 (약간 간체)이 있습니다

USER_ID | USER | TARGET_ID | TARGET_USER | EFFECT_DATE | REQUEST_NO | EXPIRY_DATE | 
------------------------------------------------------------------------------------ 
a11  | jon | a22  | steve | 21/12/2014 | 555324 | 28/12/2014 | 
a11  | jon | a33  | jim  | 23/12/2014 | 555324 | 28/12/2014 | 
a11  | jon | a44  | bob  | 24/12/2014 | 555324 | 28/12/2014 | 
a22  | steve| a33  | jim  | 24/12/2014 | 555324 | 28/12/2014 | 

거대한 문제는 3 복합 키 있다는 것입니다 :

USER_ID는, TARGET_ID 및 EFFECT_DATE

나는이 ISN 실현을 사용하기 쉽지 만 내가 제공 한 것이므로 테이블의 디자인에 대해 많은 통제력이 없습니다. 나는 다음과 같은 복합 키 매핑을 사용하여 최대 절전 모드를 사용하여 내 DB에 연결 한

:

<composite-id name="actAsID"> 
     <key-property name="userID" column="PROXY_USER_ID" type = "string" /> 
     <key-property name="targetID" column="TARGET_USER_ID" type="string"/> 
     <key-property name="effectDate" column="EFFCT_DATE" type="date" /> 
</composite-id> 

이 절대적으로 잘 작동하고 나는 사용자가이를 제거하고 검색에 추가 할 수 있습니다. 이 문제는 사용자를 검색 할 때 사용자 ID, 대상 ID 및 유효 날짜에 값을 입력해야하는 것처럼 보입니다. 즉, 매번 한 행의 데이터 만 가져 오는 것입니다. 이것은 내가 단 한 줄을 얻을 수 있다고 믿게하거나 아주 제한된 것처럼 보이는 모든 것을 얻을 수있다.

1) 2 표
의 모든 행 가져 오기)를 USER_ID 검색 나에게 나에게 모든 것을 제공하는 TARGET_ID 검색이 USER_ID
3) 모든 행을 줄 수 :

여기 네 가지 주요 사용 사례가 그 TARGET_ID
4)와 행은 주어진 USER_ID 및 TARGET_ID에 기반 검색

나는 매핑 파일에 USER_ID하는 단지 ID 세트가 않았다하지만 이것은 단지 내가 가진 모든 사용자 또는 모든 행을 얻을 수 있습니다 USER_ID 즉 TARGET_ID에 where 절을 사용할 수 없습니다.

+0

복합 키 ar e는 Hibernate에서 낙담했다. DB 스키마를 수정 해보십시오. 예를 들어 동일한 user_id를 가진 여러 사용자가있는 것 같습니다. 테이블이 재 설계되면 Hibernate에서 참조 할 수있는 PK가 있어야한다. – Dave

+0

나는 이미 이것을 알고 있지만 DB 스키마에 대한 통제권이 없다고 말했고 사용하는 PK가 있더라도 똑같은 문제가 발생했을 것입니다. (USER_ID = "A11") 또는 (TARGET_ID = "A22") 또는 (USER_ID = "A11"AND TARGET_ID = "A22") : 나는를 검색 할 수 있도록하려면 내 질문에 따라서 최대 절전 모드에서 ID 필드에없는 절을 어떻게 생성합니까? 나는 JDBC를 사용하여 내 자신의 ORM을 효과적으로 만들었으며 현재 최대 절전 모드의 이점을보기 위해 고심 중이다. –

+0

아는 한'actAsID.userID = 'foo'' 또는'actAsID.targetID ='bar'' 등을 간단하게 질의 할 수 있습니다. – geert3

답변

1

나는 Hibernate 내에서 HQL이나 Criteria를 사용할 수있다. HQL의

List<ProxyUser> Users = session.createCriteria(User.class) 
      .add(Restrictions.eq("actAsID.userID", "11")) 
      .list(); 

좋은 예 :

예를 들어 다음 코드는 A11의 USER_ID와 나에게 모든 사용자를 제공

: 복합 키를 사용하여 기준을 사용

http://www.journaldev.com/2954/hibernate-query-language-hql-example-tutorial

Hibernate : how to get records from composite key using Criteria Query