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.LAZYFetchType.EAGER。 EAGER 将尝试使用外部连接选择 检索关联的对象,而 LAZY 只会触发选择 当关联对象第一次被访问时。 @OneToMany@ManyToMany 关联默认为 LAZY 和 @OneToOne@ManyToOne 默认为 EAGER。

您可以找到完整的文档here。

【讨论】:

以上是关于hibernate:使用注释的完全连接的主要内容,如果未能解决你的问题,请参考以下文章

inner join(内连接)left join(左连接)right join(右连接)full join(全连接)区别

运行时获取 ResNet 模型全连接层的输入

CRF和全连接CRF的区别?

如何使用 PyTorch 中的单个全连接层直接将输入连接到输出?

全外连接与全连接

你知道TCP的半连接与全连接队列吗?