java hql left join_Hibernate:如何使用Left Join

假设我有两个表:TableA和TableB . TableA和TableB在两个字段(fieldA1和fieldA2 over fieldB1和fieldB2)上的@OneToOne关系中,并且TableA的所有实例都不存在这种关系 .

我想用Hibernate做的是让所有出现的TableA与TableB的出现有或没有关系 . 为此,我显然必须使用左连接 .

考虑到TableA的实体具有使用注释@OneToOne声明的TableB实体的属性“tableB”,我该如何创建查询?

这是正确的查询吗?

从表中选择一个左连接获取a.tableB

我的这个查询的问题是,当tableA的某些行与TableB的任何行没有匹配时,Hibernate会抛出一个依赖于我使用的注释(fetch = EAGER或LAZY)的异常 .

我发布我的代码更清楚:

@Entity

@Table(name = "TABLE_A")

public class TableA extends EvoluzioneStati implements Serializable {

private static final long serialVersionUID = 1L;

@OneToOne

@JoinColumns({

@JoinColumn(name = "ID", referencedColumnName = "ID", insertable=false, updatable=false),

@JoinColumn(name = "NUM", referencedColumnName = "NUM", insertable=false, updatable=false) })

private TableB tableB;

other code here...

如果我使用LAZY注释,查询处理正常,但是当我尝试访问tableB对象以检查它是否为null时,会发生LazyInitialization异常 . 相反,当我使用EAGER注释时,它会在处理查询期间抛出异常,因为某些事件的TableA在TableB中没有匹配 . 我确切地说,由于项目组成和配置,当我返回查询结果时,我无法初始化Hibernate会话 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值