Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
@Entity
public class A {
@Id
@GeneratedValue(strategy = AUTO)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name="b_id")
private B b;
protected Pet() {}
public A(String name, B b) {
this.name = name;
this.b = b;
}
}
Gdzie B to też jakieś entity. Teraz chcę robiąc POST do /b wysłać jsona typu:
Kopiuj
{
"name": "Hello, World",
"bId": 1
}
zamiast
Kopiuj
{
"name": "Hello, World",
"b": {
milion pól z b
}
}
Pokaż może więcej kodu odpowiadającego za tworzenie JSONA który przesyła A do B, może tam możesz się odwołać tylko do pola id podczas przesyłania obiektu jako JSON ?
W relacji A->B nie ustawiamy kaskady, więc każdy zapis B musimy ręcznie inicjować (em.save(b)). Wtedy mamy możliwość zrobić taki trik:
Kopiuj
B b =newB();
b.id =12345;
a.b = b;
Nie spowoduje to utworzenia nowego obiektu, a tylko zapisanie odpowiedniego id w rekordzie typu A. Czyli zamiast miliona pól z B używasz tylko jednego: id. Zrobiłem podobny test tutaj.
Jest jeszcze możliwość ustawienia podwójnego mapowania pola b, przez referencję i przez id. Ale tylko jedno z nich może być zapisywalne (updatable = true), więc i tak nie udałoby się eleganco zorganizować wariantu jsonowego bId = "5".
Usunąć wpis?
Tej operacji nie będzie można cofnąć.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.