我有两张表abc
和device
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”也需要显示。