1

我有两张桌子abcdevice

美国广播公司:

   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;    

设备

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>

我的要求是

  • 当用户从 UI 搜索时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”也需要显示。

4

0 回答 0