@Entity
public class Troop {
@OneToMany(mappedBy="troop")
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk")
public Troop getTroop() {
...
}
walczę z dokumentacją na ten temat:Co oznacza właściciel relacji w trybie hibernacji?
Troop has a bidirectional one to many relationship with Soldier through the troop property. You don't have to (must not) define any physical mapping in the mappedBy side.
Tak na przykład następujący kod:
Troup t = new Troup();
t.getSoldiers().add(soldier);
Co różnica będzie, jeśli po prostu nazywa session.saveOrUpdate(t)
, a jeśli po prostu nazywa session.saveOrUpdate(s)
? MappedBy definiuje grupę jako właściciela, ale co konkretnie to oznacza? Ponieważ spodziewam się, że jeśli zapiszę obiekt żołnierza, z pewnością kolumna troop_fk zostanie zapisana poprawnie? A jeśli po prostu zapiszę obiekt grupy, z pewnością klucz obcy żołnierza będzie nadal poprawnie aktualizowany podczas kaskadowania? Naprawdę nie widzę różnicy.
Aby uzyskać więcej informacji, sprawdź rozdział 2.2.5.3.1.1. na http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-association. Informacje na temat przełączania prawa własności z jednego podmiotu na inny w powyższym przykładzie. –
z kaskadowaniem i owner = troop, INSERT INTO soldiers (..., troop_fk) VALUES (..., NULL). Jeśli w tabeli żołnierzy toop_fk nie jest zerowany, to podczas wykonywania zapytania hibernuje błąd thows. Czy to deweloper musi się tym zająć? –
jeśli kolumna nie jest pusta, po prostu nie można użyć "kaskadowanie i właściciel = oddział" – Firo