ho una mappatura hibernate come questo in una classe ProductDfnHibernate predefinita unirsi per nullable molti-a-uno
@ManyToOne(fetch = FetchType.LAZY, optional = true)
@JoinColumn(name = "productTypeFk", nullable = true)
public ProductType getProductType()
{
return productType;
}
nota che il rapporto è definito come optional (e la colonna è nullable).
Quando si fa qualcosa di simile HQL
select p.name as col1, p.productType.name as col2 from ProductDfn p
Un inner join serve per unire ProductDfn al di prodotto come Hibernate genera l'SQL esplicito aderire dalla implicita join nella clausola select.
Tuttavia, quando si esegue quanto sopra quando productType è null (nel DB) non viene restituita alcuna riga a causa del join interno. Per questa relazione mi piacerebbe avere l'ibernazione di default per fare un join esterno (perché la relazione è facoltativa), quindi otterrei un "nullo" per col2 piuttosto che nessuna riga.
Qualcuno sa se questo è possibile?
Grazie.
Grazie, ero alla ricerca di un modo per avere Hibernate cambiare è di default tipo di join per join impliciti fatti nella clausola select. Il motivo è che abbiamo un'app in cui molte query sono auto/semi generate a causa del recupero dei dati tabulari. Quindi possiamo fare oggetto di base = ProductDfn e col1 è name, col2 è productType.name ecc. Normalmente funziona bene, solo per chiavi straniere nullable non funziona nel modo che preferisco. –
Non esiste un "tipo di join predefinito", tuttavia - il join implicito sarà sempre interno. Se le tue query sono state generate, considera l'utilizzo di Criteri anziché HQL: fondamentalmente impone l'uso per descrivere esplicitamente l'associazione (tramite alias/criteri nidificati) e puoi sempre specificarlo come join esterno. – ChssPly76