首页 > 解决方案 > Hibernate @OneToMany 子选择本机查询

问题描述

我有一个与第二个实体列表有@OneToMany 关系的实体。

@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "PAYLD_ID")
@Fetch(FetchMode.SUBSELECT)
private List<KeyValueEntity> kvList;

所以子查询是单独完成的。我的问题是如何在子选择上运行我自己的查询,因为我需要解决一些交叉引用?

我希望能够,每当为 List 执行子查询以提供我自己的本机或命名查询时。这可以在 Hibernate 中完成(使用版本 4.2.21)吗?

主要实体正在使用本机查询:

Payload {

long id;
string cd
@OneToMany(fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)

List<KeyValueEntity> kvList;

}

命名本机查询(简称):

 select pl.id, sct.cd from payload pl join SCT sct on sct.CSN = pl.TCSN

当执行子查询以通过 @OneToMany 关系检索 kvList 时,我看到以下查询:

select kv.pl_id, kv.keycode, kv.value from KV kv where kv.pl_id=?

但是,我想将子查询(以上)更改为:

select kv.pl_id, sct.CD, kv.value from KV kv join SCT sct on kv.keycode=sct.CDN where kv.pl_id=?

有没有办法做到这一点?

标签: javahibernatejpa

解决方案


推荐阅读