我是新手,我已阅读文档,在我看来,它并没有完全展示如何从初学者的角度来做这些。所示的示例仅显示最多来自一个或两个表的示例。任何帮助都将非常感激。
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 :(得分:0)
假设您有一个Emp_PersonalDetails类,其中一个名为“reporting”的关联引用了一个Emp_Reporting类的实例,那么类似下面的内容应该有效。 请注意,我已经为你喜欢的条件使用了nameVar和empIdVar。 另请注意,这将返回Emp_PersonalDetails的实例,但会同时获取Emp_Reporting。您必须通过返回的Emp_PersonalDetails实例访问Emp_Reporting。
session.createCriteria( Emp_PersonalDetails.class )
.setFetchMode( "reporting", FetchMode.JOIN )
.setFetchMode( "details", FetchMode.JOIN )
.add( Restrictions.like( "firstName", nameVar ))
.add( Restrictions.like( "empid", empIdVar ))
你的Hibernate映射看起来像:
<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>