加入查询在hibernate中不返回不匹配的记录

时间:2012-12-04 09:30:15

标签: hql

我有两张表abcdevice

ABC:

   CREATE TABLE `abc (    
       `Id` INT(11) NOT NULL AUTO_INCREMENT,    
       `empid` INT(11) DEFAULT NULL,    
       `empName` VARCHAR(500) DEFAULT NULL,    
      issueDate DATE DEFAULT NULL,    
       `deviceId` INT(11) DEFAULT NULL,    
       PRIMARY KEY (`allochardwareId`),    
       FOREIGN KEY (`deviceId`) REFERENCES `device` (`deviceId`)    
     ) ENGINE=INNODB  DEFAULT CHARSET=latin1;    

DEVICE

CREATE TABLE `device` (    
  `deviceId` INT(11) NOT NULL AUTO_INCREMENT,    
  `deviceName` VARCHAR(20) DEFAULT NULL,    
    quantity INT(11) DEFAULT NULL,     
       serialNo VARCHAR(20) DEFAULT NULL  
  `deviceTypeId` int(11) DEFAULT NULL,    
    PRIMARY KEY (`deviceId`),FOREIGN KEY (deviceTypeId`) REFERENCES `deviceType` (`deviceTypeId`);    
) ENGINE=INNODB DEFAULT CHARSET=latin1;    

ABC

的映射文件
<many-to-one name="device" class="com.model.device" cascade="all" >
   <meta attribute="default-value">new Device()</meta>
   <column name="deviceId" />
</many-to-one>

我的要求是

  • 当用户从用户界面搜索deviceName时,它将获取数据第一个表并分配相应的员工ID。
  • 如果未指定需要返回空值

如何在HQL中编写此代码 我在SQL中编写了一个示例查询,但是我不知道如何将它转换为HQL。

这是SQL查询

SELECT *  
FROM abc 
LEFT JOIN device 
ON device.deviceId=abc.deviceId where device.serialNo="ee" and abc.empid="6" 

我将相应的HQL编写为

select abc from ABC ABC LEFT JOIN abc.device where device.serialNo="ee"  

这里只返回两个表中的匹配记录。如果在另一个表中找不到记录,我需要以这样的方式检索记录即使不匹配也显示为空值。例如,某些记录在设备中可用但在ABC中没有,序列号=“ee”也需要显示。

0 个答案:

没有答案