1

私は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では表示する必要がありません。

4

0 に答える 0