我有两张桌子abc
和device
美国广播公司:
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”也需要显示。