hibernate:使用注释的完全连接
Posted
技术标签:
【中文标题】hibernate:使用注释的完全连接【英文标题】:hibernate: full join using annotations 【发布时间】:2013-03-17 04:11:45 【问题描述】:我想使用休眠对两个表执行完全外连接。
这两个表没有任何外键主键关系。
表 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
如何将此查询转换为带有表类中注释的休眠查询?
【问题讨论】:
是的,这些类使用列和主键的注释进行映射。您将两个表关联起来的部分。因为我有两个 bean 用于两个表,所以我不知道如何编写我的 hql 查询。 我们需要映射才能提供帮助。 You join 子句是a.valcode=b.id
,但它们都是不同的数据类型。这是一个有效的 SQL 吗?
【参考方案1】:
这确实是一个好问题。我还没有遇到这个问题;所以,我对任何可能的解决方案也很感兴趣。
如果我理解正确,这两个表之间没有任何“自然”关系。因此,我不确定是否有一种简单有效的方法可以使用 HQL 或 Criteria 来使用 Hibernate。
如果你使用你想要的 SQL 创建一个视图并将这个视图映射到一个 Hibernate 实体会怎么样?
【讨论】:
【参考方案2】:据我从 Hibernate 文档中了解到,您可以在关系注释上使用 fetch 属性并将其设置为FetchType.EAGER
:
您可以急切地或懒惰地获取关联的 实体。 fetch 参数可以设置为
FetchType.LAZY
或FetchType.EAGER
。 EAGER 将尝试使用外部连接选择 检索关联的对象,而 LAZY 只会触发选择 当关联对象第一次被访问时。@OneToMany
和@ManyToMany
关联默认为 LAZY 和@OneToOne
和@ManyToOne
默认为 EAGER。
您可以找到完整的文档here。
【讨论】:
以上是关于hibernate:使用注释的完全连接的主要内容,如果未能解决你的问题,请参考以下文章
inner join(内连接)left join(左连接)right join(右连接)full join(全连接)区别