Podstawowe pytanie: Dlaczego obiekty @Embedded nie są zawsze tworzone?@Wbudowany obiekt nie jest tworzony automatycznie, jeśli nie ma podstawowych typów pól danych
Interesującą obserwacją jest to, że Ebean nie tworzy instancji @Embedded, jeśli nie zawierają one podstawowych typów danych (int, boolean ...) lub nie zostały wcześniej dotknięte. Przykład:
@Entity
public class Embedder {
// getNotAutoInstantiated() will return null if this field was not touched before
@Embedded
private NotAutoInstantiated notAutoInstantiated = new NotAutoInstantiated();
// getAutoInstantiated() will always return an instance!
@Embedded
private AutoInstantiated autoInstantiated = new AutoInstantiated();
}
@Embeddable
public class AutoInstantiated {
// theKey is why this embedded object is always instantiated
private int theKey;
private String field1;
}
@Embeddable
public class NotAutoInstantiated {
private String field2;
}
Być może występuje problem z kolizjami nazw pól między wieloma osadzonymi obiektami. Zwykle dostawca JPA odwzorowuje pola obiektów osadzonych na kolumny w tabeli nadrzędnej. Jeśli osadzone nazwy pól działają długo, możesz skończyć z obciętymi nazwami pól w bazie danych, a zatem kolizjami w nazwach kolumn. – Zagrev
Przykład może być mylący. Imiona są znacznie krótsze w moim kodzie i nie zaczynają się od tego samego prefiksu. Ale nawet w tym przykładzie pola zaczynają się od "nie" i "auto", więc obcięcie nie byłoby wielkim problemem. – allprog
Właściwie to myślałem o "polu" i "polu". – Zagrev