2012-05-16 2 views
0

전문가 인 전문가와 기술이라는 두 가지 클래스가 있습니다. 전문가는 여러 기술을 적용 할 수 있으며 여러 기술 전문가가 여러 기술을 사용할 수 있습니다. 기술을 추가, 업데이트하는 것은 Expert 클래스와 독립적입니다. 전문가로부터 변형 된 기술을 제거하면 관련 관계 만 제거됩니다.최대 절전 모드로 올바른 결과를 얻는 방법

Class Expert{ 
    Long id; // getter and setter 
    String name; // getter and setter; 
    Set<Technology> technos; // getter and setter 
} 

Technology{ 
    Long id; // gettter and setter 
    String name; //getter and setter 
} 

최대 절전 모드 매핑에 반영 두 클래스 사이의 관계는 내가 기술의 인스턴스가 이제

<class name="Expert"> 
    <!-- put the declaration for id and name --> 

    <set name="technos" table="EXPERT_TECHNO" cascade="delete-orphan"> 
      <key column="id_expert"/> 
      <many-to-many column="id_techno" class = "Technology"/> 
    </set> 
</class> 

<class name="Technology"> 
<!-- put declaration for id and name--> 
</class> 

, 나는 기술을 maitrise 모든 전문가를 찾으려면, 그래서 최대 절전 모드를 사용하는 방법 결과를 얻기위한 critera? 또는 createQuery를 사용하여 결과 집합을 가져 오는 가장 간단한 방법입니다.

최대 절전 모드 방법에 익숙하지 않기 때문에 도움을 청합니다!

추가 질문 : 나는이 전문가의 기술을 제거 할 때

, 내가 원하는 것은, 테이블 "EXPET_TECHNO"에 줄을 제거 단순히는 howevery, 내가했던 것은 그 expert.getTechnos.remove (테크노), 내가 가지고 싶지 않은 테이블에서 기술을 제거합니다!

답변

2

이 문제를 해결하는 가장 쉬운 방법은 ManyToMany 연관을 양방향으로 만드는 것입니다. 이 옵션이 아니라면 그냥 지금

Set<Expert> experts = technology.getExperts(); 

을해야 할 것, HQL 동적으로 구성되지 않은 이러한 쿼리, 기준보다 더 쉬울 것이다.

Criteria c = session.createCriteria(Expert.class, "expert"); 
c.createAlias("expert.technos", "techno"); 
c.add(Restrictions.eq("techno.id", technoId)); 

당신은 혼자서이 발견 많은 배웠다 수 :, 당신은 다음을 수행 할 필요가 간단

select expert from Expert expert 
inner join expert.technos techno 
where techno.id = :technoId 

당신이 정말 정말 기준이 작업을 수행하려면

으로 쿼리는 것 다른 것들은 Hibernate documentation을 읽어보십시오.

+0

예, 발견했습니다. createAlias ​​함수가 잘못된 것입니다. 귀하의 sulution 주셔서 대단히 감사합니다. – lhuang

+0

또 다른 질문, 업데이트를 다루는 방법, 제거하는 방법, many-to-many 연관을위한 기준을 사용하는 방법? – lhuang

+0

기준 쿼리는 데이터베이스에서만 선택할 수 있습니다. 연결을 제거하거나 업데이트하려면 검색된 전문가의 기술 모음에서 엔티티를 제거하거나 업데이트하십시오. –

관련 문제