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 Entity
即 FirstTable
。
例如:
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--)
我正在尝试做这样的事情
原生 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 Entity
即 FirstTable
。
例如:
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--)