Hibernate Standard-Beitritt für nullable viele-zu-eins -
Ich habe eine hibernate-mapping, wie dies in einer ProductDfn Klasse
@ManyToOne( fetch = FetchType.LAZY, optional = true )
@JoinColumn( name = "productTypeFk", nullable = true )
public ProductType getProductType()
{
return productType;
}
Beachten Sie, dass die Beziehung definiert ist als optional (und die Spalte null-Werte zulässt).
Wenn dabei HQL sowas
select p.name as col1, p.productType.name as col2 from ProductDfn p
Einem inner join wird verwendet, um beitreten ProductDfn "ProductType" wie hibernate generiert die explizite SQL join von der impliziten Joins in der select-Klausel.
Jedoch, wenn dabei die oben bei der "productType" null ist (in der DB) wird keine Zeile zurückgegeben, da der inner join. Für diese Beziehung, die ich haben möchte, hibernate-Standard zu tun, einen outer join (da die Beziehung optional ist) also, ich würde eine "null" zurück für col2 lieber als gar keine-Reihe überhaupt.
Weiß jemand, ob das möglich ist?
Dank.
InformationsquelleAutor Mike Q | 2009-10-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen inner join verwendet, weil Sie haben explizit aufgeführt
p.productType.name
in der select-Klausel. Dies wäre nicht passiert, waren Sie nur zu wählenProductDfn
seit Ihr fetch festgelegt istLAZY
.Wenn Sie nur abrufen müssen diese beiden Eigenschaften müssen Sie explizit angeben, einen outer-join in der Abfrage:
Es gibt keine "Standard-join-Typ", obwohl - implizite join immer werden innere. Wenn Ihre Abfragen generiert werden, sollten Sie mithilfe von Kriterien statt HQL - es ist im Grunde erzwingt die Verwendung zu beschreiben, die der Verein explizit (über alias - / nested-Kriterien), und Sie können immer geben Sie es als outer-join.
InformationsquelleAutor ChssPly76