2013-03-17 61 views
0

我想使用休眠在两个表上执行完全外连接。休眠:使用注释进行全连接

这两个表没有任何外键主键关系。

表1.

valcode nvarchar2(10) 
value number 
datemodified date 

表2

id number 
result nvarchar2(10) 

SQL查询:

select a.valcode, b.id, b.result from table1 a,table2 b (+) on a.valcode=b.id order by a.valcode 

如何转换这种使用表类中的注释查询到一个hibernate查询?

+0

是这些类与列和主键的注释映射。您与两个表相关的部分。因为我有两个豆的两个表我不知道如何写我的hql查询。 – BaN3 2013-03-19 10:04:36

+0

我们需要映射才能提供帮助。 – benzonico 2013-03-19 10:24:01

+0

你的join子句是'a.valcode = b.id',但它们都是不同的数据类型。那是一个有效的SQL吗? – 2016-01-21 16:20:20

回答

0

这确实是一个很好的问题。我还没有来到这个问题。所以,我对任何可能的解决方案都很感兴趣。

如果我理解正确,这两张表之间没有任何“自然”关系。因此,我不确定是否有一种简单而有效的方法可以使用HQL或Criteria进行Hibernate。

如果您使用所需的SQL创建视图并将该视图与Hibernate实体进行映射,那么该怎么办?

0

据我从Hibernate文档知道,你可以使用fetch的关系注释属性并将其设置为FetchType.EAGER

你必须主动或被动获取相关 实体的能力。获取参数可以设置为FetchType.LAZYFetchType.EAGER。 EAGER会尝试使用一个外连接来选择 检索关联对象,而LAZY只会在第一次访问关联对象时触发一个选择 。 @OneToMany@ManyToMany协会默认为LAZY, @OneToOne@ManyToOne默认为EAGER。

你可以找到完整的文件here