2012-10-02 1 views
2

나는 NodeData과 연결된 Node을가집니다. 이 NodeData에는 개정이 있고 Node에는 마지막 개정 인 것을 나타내는 latestRevision 열이 있습니다.최대 절전 모드 - 상위 및 하위 테이블의 열에서 필터링 설정

아래의 집합을 latestRevision에 필터링하여 Node에 필터링하는 데 필요한 매핑을 찾으려고합니다.

Caused by: com.jnetdirect.jsql.JSQLException: Invalid column name 'latestRevision'. 

가 뱉어 쿼리는 다음과 같습니다 : 그것은으로

select nodedatas0_.nodeID as nodeID1_, nodedatas0_.dataKey as dataKey1_, nodedatas0_.dataOrder as dataOrder1_, nodedatas0_.revision as revision1_, nodedatas0_.nodeID as nodeID46_0_, nodedatas0_.dataKey as dataKey46_0_, nodedatas0_.dataOrder as dataOrder46_0_, nodedatas0_.revision as revision46_0_, nodedatas0_.dataValue as dataValue46_0_ from RatNodeData nodedatas0_ where nodedatas0_.revision = nodedatas0_.latestRevision and nodedatas0_.nodeID=? order by nodedatas0_.dataOrder asc 

나는이 잘못 말할 수

<class name="Node" table="RatNodes"> 
    <id name="id"> 
     <generator class="native"/> 
    </id> 
    <set fetch="join" name="nodeDatas" table="RatNodeData" inverse="true" access="field" cascade="all-delete-orphan" order-by="dataOrder asc"> 
     <key column="nodeID" on-delete="cascade"/> 
     <one-to-many class="NodeData"/> 
     <filter name="revisionFilter" condition="revision = latestRevision"/> 
    </set> 
    <property name="questionNumber" access="field"/> 
    <property name="type" access="field"/> 
</class> 
<class name="NodeData" table="RatNodeData"> 
    <composite-id> 
     <key-property name="nodeID" access="field"/> 
     <key-property name="key" access="field" column="dataKey"/> 
     <key-property name="order" access="field" column="dataOrder"/> 
     <key-property name="revision" access="field"/> 
    </composite-id> 
    <property name="value" access="field" type="EncodedStringUserType" column="dataValue"/> 
</class> 

나는 필터를 사용이 매핑의 결과는 오류입니다 NodeDatalatestRevision을 찾고 있지만 그 대신에 Node을 보도록 지시하는 방법을 모르겠습니다. 이것이 최대 절전 모드에서 가능합니까? 내가 방금 SQL을 사용했다면 꽤 간단한 쿼리와 같습니다.

답변

0

대신 매핑 파일에서 일을하려고의 이렇게까지 종료 :

List datas = session.createCriteria(NodeData.class) 
       .add(Restrictions.eq("nodeID", this.id)) 
       .add(Restrictions.eq("revision", this.latestRevision)) 
       .list(); 

잘 모르겠어요 문제는이 아닌지을 할 수있는 올바른 방법 인 경우. 너무 매핑 파일 솔루션에 대해 듣고 싶어요.

+0

Hello Philippe,이 솔루션을 사용하고 계십니까? IMHO는 좋아 보이지만 맵핑에 대해서도 듣고 싶습니다! 당신은 http://stackoverflow.com/questions/24283199/use-a-filter-within-a-composite-id-in-hibernate를보실 수 있습니다 – Gaucho

+0

나는 잠시 동안 그 프로젝트에서 일하지는 않았지만 멀리까지 내가 알듯이 그것은 여전히 ​​그런 식으로 일하고 있습니다. –

+0

감사합니다. Philippe! 제가 그 일을 처리 할 수 ​​있다면 알려 드리겠습니다. 건배 – Gaucho

0

필터 매개 변수로 'latestRevision'또는 'latestRevision'필터를 정의하지 않았습니다. 따라서 실제로 엔티티가 무엇을 의미하는지 알 수 없습니다. 다음을 시도해보십시오. 자세한 도움말은

link를 보라.