我有以下结构:
Table1
T1_ID
T1_Col1
Table2
T1_ID
T3_ID
Table3
T3_ID
T3_Col1
我有Table1
和Table3
的实体对象。但是,我没有Table2
的实体对象。我不想创建它,因为我必须更长时间地为实体创建复合键等。
我想要使用的是这样的查询:
select t3 from Table1 t1, Table2 t2, Table3 t3
where t1.t1_id=:id
and t2.t1_id=t1.t1_id
and t2.t3_id=t3.t3_id
实际问题
我有Table1
的存储库,其Table3
配置为lazyloading
。但是,当我在Table1
抓取primarykey
后尝试访问时,我收到异常org.hibernate.LazyInitializationException
。
在做了一些研究之后,我发现我在那里没有会话。我尝试了几个解决方法但没有工作。鉴于持久性框架是由另一个团队编写的,我不知道是否可以完成。所以我正在寻找这个可能更容易的解决方案。
答案 0 :(得分:0)
使用FETCH JOIN通过JPQL查询而不是主键来获取关联的Table3
和Table1
的解决方法。在某种程度上,它会覆盖延迟加载配置。
然后,获得你想要达到的目标的查询将是:
select t1 from Table1 t1 left join fetch t1.table3 where t1.id = :id
编辑:根据你的描述,我想你有一些类似的实体模型。
@Entity
class Table1 {
@Id
@Column(name="T1_ID")
long id;
@OneToOne// also works with @ManyToMany
@JoinTable(name="Table2",
joinColumns={@JoinColumn(name="T1_ID")},
inverseJoinColumns={@JoinColumn(name="T3_ID")}
Table3 table3;
...
}
@Entity
class Table3 {
@Id
@Column(name="T3_ID")
long id;
...
}
另外,请查看this site。您将找到几个有用的场景以及如何映射到实体模型。