15

我在 ProductDfn 类中有这样的休眠映射

@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 时(在数据库中)执行上述操作时,由于内部连接,不会返回任何行。对于这种关系,我希望休眠默认进行外部连接(因为关系是可选的),所以我会为 col2 返回一个“null”,而不是根本没有行。

有谁知道这是否可能?

谢谢。

4

1 回答 1

11

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

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

select p.name as col1, ptype.name as col2
  from ProductDfn p
  left join fetch p.productType ptype
于 2009-10-06T15:45:12.167 回答