Hibernate HQL 中的多个连接条件,同时映射数据而不是 where 子句



我正在尝试做这样的事情

本机 SQL :

Select * 
from FirstTable ft 
   right join SecondTable st on (st.ID=ft.ID and ft.fStatus !='b') where ft.fStatus!='b'

简而言之,我只是不想在有这样的事情时FirstTable数据与SecondTable映射[ft.fStatus !='b'].但是当这种情况发生时,我想从SecondTable获得相应的记录。

我搜索了这个并找到了with关键字,但这对我的情况没有帮助。请查看以下示例数据以获取任何参考:

FirstTable
   fId  |   fName   |   fStatus
++++++++++++++++++++++++++++++
    1   |   Name1   |     b
    2   |   Name2   |     b
    3   |   Name3   |     a
    2   |   Name4   |     b
    3   |   Name5   |     b
    4   |   Name6   |     a
    4   |   Name7   |     a

SecondTable
   sId  |   sName
+++++++++++++++++++
    1   |   Name1
    2   |   Name2
    3   |   Name3
    4   |   Name4

Expected Output :
   fId   |   fName    |   sId  |   sName   
++++++++++++++++++++++++++++++++++++++++++++
    _   |     _       |    1   |   Name1
    _   |     _       |    2   |   Name2
    3   |   Name3     |    3   |   Name3
    4   |   Name6     |    4   |   Name4
    4   |   Name7     |    4   |   Name4

您需要在Parent Entity中添加oneToMany映射,即 SecondTable Child EntityFirstTable .例如:

class FirstTable{
    Integer pkColumn;
    SecondTable fId ; 
    String fName ;
    String  fStatus;
    --Getter and Setters
}
class SecondTable{
    Integer sId ; 
    String sName ;
    @oneToManny(mappedBy="fId ")
    List<FirstTable> firstTable;
    --Getter and Setters
}

预期输出的 HQL:

SELECT ft.fId, ft.fName, st.sId, st.sName FROM SecondTable st 
  LEFT JOIN st.firstTable ft WITH ft.fStatus != 'b' 
    WHERE (--other Conditions--)

最新更新