加入Hibernate:HQL相当于给定的SQL

时间:2015-06-11 12:01:09

标签: hibernate postgresql join hql

我有2个表格可以说fibranchMst

------------------                       ---------------------
|       fi       |                       |    branchMst       |
------------------                        --------------------
|     fi_id      |                       |     branchId       | 
|      uid       |                       |     branchCode     |
|   branch_code  |                       |     branchName     |
------------------                       ----------------------

现在为了获得每个fi的UID和分支名称:

SQL:

select uid,branchName from fi left join branchMst bm 
                             on fi.branch_code=bm.branch_code;

它将为我提供所需的记录,但我想通过Hibernate Association进行相同的操作。

有些疑惑:

1)branchCode不是branchMst中的主键,因此如何定义我的一对多关联。

2)如果我在5个表上定义关联并且我只想要来自2个表的数据,那么所有关联映射是否仍然适用?

1 个答案:

答案 0 :(得分:1)

不引入关联

select uid, branchName from fi, branchMst bm where fi.branch_code = bm.branch_code;

select uid from fi where branch_code not in (select branch_code from branchMst);

然后以编程方式组合结果。

更多详情here

使用关联

1)您不需要一对多关联,您需要一对一。但是您需要将fi表更改为引用branchId(PK,我假设)。然后使用:

select fi.uid, bm.branchName from Fi fi left join BranchMst bm

2)我不完全理解你的意思,但你可以根据需要定义与多个实体的关联,你当然可以只阅读你的查询所需的内容。

关联不会更改fibranchMst

您可以在fi上创建一个视图,该视图将提供branchId列,然后将Fi实体映射到该视图。

关联中没有任何数据库更改

这是不可能的。见question.