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

Multiple join Conditions in Hibernate HQL, while mapping the data instead of in where clause

我正在尝试做这样的事情

原生 SQL :

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

简而言之,当出现 [ft.fStatus !='b'] 这样的情况时,我不想将 FirstTable 数据映射到 SecondTable。但是当发生这种情况时,我想从 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--)