Jest to związane z this question, ale poniższy przykład jest krótszy, więc pomyślałem, że inne pytanie na ten temat miałoby sens.Play + Ebean + JPA: Kaskada usuwanie na mapowaniu OneToOne
Mam dwie jednostki, A i B, w relacji jeden-do-jednego. Dla A, B jest opcjonalne, a każdy B musi mieć A. Chcę kaskady usuwa z punktu A do B. Oto moja pierwsza próba:
@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;
}
Jednak wydaje się, że Ebean ignoruje „opcjonalne” adnotacji, bo kiedy wykonać znaleźć dla zapisanego a o identyfikatorze 1 dodaje SQL jest wykonywany:
select t0.id c0, t1.id c1
from a t0
join b t1 on t1.a_id = t0.id
where t0.id = 1
innymi słowy, to robi wewnętrzną zamiast lewej przyłączyć, co powoduje, że znalezisko na niepowodzenie, gdy nie ma skojarzonego B. Próbowałem różnych kombinacji @JoinColumn
itp. bez rezultatu. Jedynym dość satysfakcjonującym obejściem jest model A-to-B jako "fałszywa" relacja jeden-do-wielu. Czy istnieje lepsze rozwiązanie? Czy jest to błąd, czy jest to znane/stwierdzone ograniczenie Ebean?