私は2つのテーブルを持ってい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;
端末
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がフェッチされます。 - 割り当てられていない場合はnull値を返す必要があります
これを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"
ここでは、両方のテーブルで一致するレコードのみが返されます。レコードが別のテーブルに見つからない場合、一致しない場合でもnull値で表示されるようにレコードを取得する必要があります。たとえば、一部のレコードはデバイスで使用できますが、シリアル番号="ee"のABCでは表示する必要がありません。