2014-12-23 4 views
0

저는 이것을 처음 접했고 설명서를 읽었습니다. 제 의견으로는 초보자의 관점에서이 작업을 수행하는 방법을 잘 보여주지 못했습니다. 기껏해야 하나 또는 두 개의 테이블로부터의 예제. 어떤 도움이라도 대단히 감사 할 것입니다. 당신을 가정Criteria API를 사용하여 다음 쿼리를 작성하는 방법

SELECT EMPP.empid, EMPP.firstName, EMPP.middleName, EMPP.lastName, EMPJ.jobTitle, 
     EMPJ.status, EMPJ.department, EMPR.manager 
FROM Emp_PersonalDetails EMPP 
JOIN Emp_JobDetails EMPJ 
ON  EMPP.EMPID = EMPJ.EJDID 
JOIN Emp_Reporting EMPR 
ON  EMPP.EMPID = EMPR.RDID 
WHERE EMPP.firstName LIKE :name 
OR  EMPP.empid LIKE:id 

답변

0

는 Emp_Reporting 클래스는 작업을해야 다음과 같은 무언가의 인스턴스를 참조하는 '보고'라는 이름의 협회와 함께 Emp_PersonalDetails 클래스가 있습니다. 같은 조건에 nameVar 및 empIdVar를 사용했습니다. 또한 Emp_PersonalDetails의 인스턴스를 반환하지만 Emp_Reporting을 동시에 가져옵니다. 반환 된 Emp_PersonalDetails의 인스턴스를 통해 Emp_Reporting에 액세스해야합니다.

<class name="example.Emp_PersonalDetails" table="..."> 
    <id name="empid" column="empid" ...> 
    <property name="firstName" ...> 
    ... 
    <one-to-one name="reporting" class="example.Emp_Reporting" lazy="proxy"...> 
    <one-to-one name="details" class="example.Emp_JobDetails" lazy="proxy" ...> 
</class> 

<class name="example.Emp_Reporting" ...> 
    <id name="id" ...> 
    <column="rdid" /> 
    <generator class="foreign"> 
     <param name="property">emp</param> 
    </generator> 
    </id> 
    <one-to-one name="emp" class="example.Emp_PersonalDetails" constrained="true" /> 
    <property name="manager" ...> 
    ... 
</class> 

<class name="example.Emp_JobDetails"...> 
    <id name="id" ...> 
    <column="rdid" /> 
    <generator class="foreign"> 
     <param name="property">emp</param> 
    </generator> 
    </id> 
    <one-to-one name="emp" class="example.Emp_PersonalDetails" constrained="true" /> 
    <property name="jobTitle" ...> 
    ... 
</class> 
+0

내가이 쿼리에 액세스해야하는 세 개의 테이블이 있습니다

session.createCriteria(Emp_PersonalDetails.class) .setFetchMode("reporting", FetchMode.JOIN) .setFetchMode("details", FetchMode.JOIN) .add(Restrictions.like("firstName", nameVar)) .add(Restrictions.like("empid", empIdVar)) 

귀하의 Hibernate 매핑은 같은 것을 볼 수 있었다. 세 번째는 "Emp_JobDetails"입니다. 나는 이것을 시도했지만 다음과 같은 예외가있다 : org.hibernate.QueryException : empid of : org.charles.periodic.metals.beans.Emp_PersonalDetails – charliebounce

+0

나는 마지막 편집을 보지 못했다. 또 다른 setFetchMode()를 추가하면 결과를 가져올 때 JobDetails를 가져 오도록 Hibernate에 지시 할 것이다. 이것은 JobDetails가 'details'관계를 통해 사용 가능하다고 가정합니다. – wbdarby

+0

감사합니다. 테이블은 일대일 관계로 기본 키로 결합됩니다. 데이터베이스는 HR 데이터베이스이며 각 테이블 8 개에서 12 개까지 8 개의 테이블에 직원 세부 정보를 저장합니다. 각 테이블에는 다음 테이블에 하나의 레코드 만 있습니다. 필자는 Hibernate가 자동으로 테이블을 만들고 기본 키를 통해 이들을 조인하도록 설정할 수 있었다. 그럼 당신이 언급 한 "보고"협회를 다음 표의 ID로 대체해야합니까 .....? 감사합니다 – charliebounce