Hibernate默认加入可空多对一

时间:2009-10-06 11:46:26

标签: hibernate join nullable outer-join

我在ProductDfn类

中有这样的hibernate映射
@ManyToOne( fetch = FetchType.LAZY, optional = true )
@JoinColumn( name = "productTypeFk", nullable = true )
public ProductType getProductType()
{
    return productType;
}

请注意,该关系被定义为可选(并且该列可以为空)。

在做HQL这样的事情时

select p.name as col1, p.productType.name as col2 from ProductDfn p

内部联接用于将ProductDfn连接到ProductType,因为hibernate从select子句中的隐式连接生成显式SQL连接。

但是,当执行上述操作时,如果productType为null(在DB中),则由于内部联接而不返回任何行。对于这种关系,我希望hibernate默认为进行外连接(因为关系是可选的)所以我会得到col2的“null”,而不是没有行。

有人知道这是否可行?

感谢。

1 个答案:

答案 0 :(得分:9)

使用内部联接是因为您在select子句中明确列出了p.productType.name。如果您选择ProductDfn,则不会发生这种情况,因为您的提取设置为LAZY

如果您只需要检索这两个属性,则必须在查询中明确指定外部联接:

select p.name as col1, ptype.name as col2
  from ProductDfn p
  left join fetch p.productType ptype