Questo è correlato a this question, ma l'esempio di seguito è più breve, quindi ho pensato che sarebbe stata utile un'altra domanda.Riproduci + Ebean + JPA: crea un'eliminazione su una mappatura OneToOne
Ho due entità, A e B, in una relazione uno-a-uno. Per una A, una B è opzionale, ed ogni B deve avere una A. Voglio cascata elimina da A a B. Ecco il mio primo tentativo:
@Entity
public class A extends Model {
@Id
private Long id;
@OneToOne(optional = true, mappedBy = "a", cascade = CascadeType.REMOVE, orphanRemoval = true)
private B b;
}
@Entity
public class B extends Model {
@Id
private Long id;
@OneToOne(optional = false)
private A a;
}
Tuttavia, sembra che Ebean ignora il "optional" annotazione, perché quando eseguo trovare per un una salvata con id 1, il seguente SQL viene eseguita:
select t0.id c0, t1.id c1
from a t0
join b t1 on t1.a_id = t0.id
where t0.id = 1
In altre parole, si fa un interno invece di una sinistra join, che provoca il ritrovamento di fallire quando non è associato B. Ho provato varie combinazioni di @JoinColumn
, ecc. senza risultato. L'unica soluzione alquanto soddisfacente che ho trovato è quella di modellare A-to-B come una relazione "uno-a-molti" falsa. C'è una soluzione migliore? Si tratta di un bug o è una limitazione nota/dichiarata di Ebean?