我有两个使用一对多关系相关联的表:employee - > department:和employee表中的department_id关系.
我使用hibernate:我的hibernate映射文件是:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping default-lazy="false">
<class catalog="moi"
name="com.ebla.moi.correspondence.model.entity.user.User" table="user">
<id name="id" type="java.lang.Long">
<column name="id"/>
<generator class="identity"/>
</id>
<many-to-one
class="com.ebla.moi.correspondence.model.entity.department.Department"
fetch="select" name="department">
<column name="department_id"/>
</many-to-one>
<property generated="never" lazy="false" name="name" type="java.lang.String">
<column length="128" name="name" not-null="true"/>
</property>
<property generated="never" lazy="false" name="email" type="java.lang.String">
<column length="128" name="email" not-null="true" unique="true"/>
</property>
<property generated="never" lazy="false" name="maritalStatus" type="java.lang.Short">
<column name="marital_status" not-null="true"/>
</property>
<property generated="never" lazy="false" name="hireDate" type="java.lang.String">
<column length="64" name="hire_date"/>
</property>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
第二个映射文件是:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping default-lazy="false">
<class catalog="moi"
name="com.ebla.moi.correspondence.model.entity.department.Department" table="department">
<id name="id" type="java.lang.Long">
<column name="id"/>
<generator class="identity"/>
</id>
<property generated="never" lazy="false" name="name" type="java.lang.String">
<column length="256" name="name" unique="true"/>
</property>
<set inverse="true" name="users" sort="unsorted">
<key>
<column name="department_id"/>
</key>
<one-to-many class="com.ebla.moi.correspondence.model.entity.user.User"/>
</set>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
我的问题是:有时我需要让他的员工与他的部门,有时我只需要员工信息与部门信息.....和部门与员工相同的事情....使用上面的映射文件如果我需要员工,hibernate会带来部门及其用户...如何定义我需要休眠来获取我需要的东西......
谢谢
and*_*coz 10
您可以将关系映射为"lazy"并编写两个查询来获取数据:
通常简单的查询来获取您的数据("懒惰").例如"从员工e中选择e ......"
使用"fetch join"强制Hibernate获取"childs"的相同查询.例如"从员工中选择e离开联系获取e.department where ......"
LLP,Andrea
您可以使用ICriteria来获取您的员工.
您可以使用ICriteria的SetFetchMode方法来确定是否应该获取Department:
这将确保不提取部门:
ICriteria crit = theSession.CreateCriteria (typeof(Employee));
crit.SetFetchMode ("Department", FetchMode.Lazy)
Run Code Online (Sandbox Code Playgroud)
使用此代码,将获取部门.
ICriteria crit = theSession.CreateCriteria (typeof(Employee));
crit.SetFetchMode ("Department", FetchMode.Join)
Run Code Online (Sandbox Code Playgroud)
有人说最好的做法是在映射中使用默认的fetchmode(我猜这会很懒),并在每个特定的场景中指定fetch-mode.(也就是说,在您的存储库中).
| 归档时间: |
|
| 查看次数: |
21071 次 |
| 最近记录: |