【发布时间】:2012-06-03 22:47:15
【问题描述】:
休眠查询
hql.append("FROM TBucket t1 JOIN FETCH t1.prd JOIN FETCH t1.psAct ");
配置
TBucket
@Table (name = "vw_f_t_bucket")
@ManyToOne (cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER, targetEntity = Posprd.class)
@JoinColumns({
@JoinColumn(name = "prod_key", referencedColumnName="prod_key"),
@JoinColumn(name = "prod_cycle_key", referencedColumnName="cycle_key"),
})
public IPosprd getprd() {
return prd;
}
prd (
@Table (name = "snp_prd")
public class Posprd implements IPosprd {
)
@ManyToOne (cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER, targetEntity = Pospsact.class)
@JoinColumn (name = "ps_act_key", nullable = false)
public IPospsact getpsact() {
return psAct;
}
psAct (
@Table (name = "vw_ps_act_firm")
public class PosPsact implements IPospsact {
)
生成查询
FROM vw_f_t_bucket tbucke0_
INNER JOIN snp_prd posprd1_
ON tbucke0_.prod_cycle_key = posprd1_.cycle_key
AND tbucke0_.prod_key = posprd1_.prod_key
JOIN FETCH t1.psAct
INNER JOIN vw_ps_act_firm pospsn2_
ON tbucke0_.ps_act_key = pspsn2_.ps_act_key
CROSS JOIN snp_prd posprd3_
CROSS JOIN vw_ps_act_firm pospsn5_
where tbucke0_.prod_cycle_key=posprd3_.cycle_key and tbucke0_.prod_key=posprd3_.prod_key and tbucke0_.posn_acct_key=pospsn5_.posn_act_key
从上面可以看出,hibernate 在最后生成交叉连接。这是为什么?如何阻止休眠生成这些交叉连接?
如果我只使用 hql 之类的
"FROM TBucket t1 ";
正在生成
from vw_f_t_bucket tbucke0_
cross join snp_prd psprd1_ cross join vw_psn_act_firm pspsn3_
如何让它进行常规连接而不是交叉连接?
【问题讨论】:
标签: java hibernate jakarta-ee hql