15

ProductDfn クラスにこのような休止状態のマッピングがあります

@ManyToOne( fetch = FetchType.LAZY, optional = true )
@JoinColumn( name = "productTypeFk", nullable = true )
public ProductType getProductType()
{
    return productType;
}

リレーションシップはオプションとして定義されていることに注意してください (列は null 許容です)。

このようなHQLを行うとき

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

内部結合を使用して ProductDfn を ProductType に結合します。これは、hibernate が select 句の暗黙的な結合から明示的な SQL 結合を生成するためです。

ただし、productType が (DB で) null のときに上記を実行すると、内部結合のために行が返されません。この関係では、休止状態のデフォルトで外部結合を実行したいと思います(関係はオプションであるため)。そのため、行がまったくないのではなく、col2の「null」が返されます。

これが可能かどうか誰にもわかりますか?

ありがとう。

4

1 に答える 1

11

p.productType.nameselect句に明示的にリストしたため、内部結合が使用されます。ProductDfnfetch が に設定されているため、選択しただけでは、これは発生しませんでしたLAZY

これら 2 つのプロパティのみを取得する必要がある場合は、クエリで外部結合を明示的に指定する必要があります。

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