IT干货网

Hibernate 在运行时更改获取模式

softidea 2025年12月25日 编程设计 169 0

我有两个使用一对多关系关联在一起的表:
员工 -> 部门:通过员工表中的部门 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> 

第二个映射文件是:
<?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> 

我的问题是:有时我需要得到他所在部门的员工,而其他时候我只需要没有部门信息的员工信息..... 与带有员工的部门相同.... 使用上面的映射文件如果我需要员工,则 hibernate 会带来部门和用户......如何定义我的 hibernate 需求以获取我需要的东西......

谢谢你

请您参考如下方法:

您可以将关系映射为“懒惰”并编写两个查询来获取您的数据:

  • 获取数据的常用简单查询(“懒惰”)。例如。 “从员工 e 中选择 e,其中 ...”
  • 使用“fetch join”强制Hibernate获取“childs”的相同查询。例如。 “从员工左侧选择 e 加入 fetch e.department where ...”

  • 律师事务所,安德里亚


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!