Что означает владелец отношений в Hibernate?
@Entity
public class Troop {
@OneToMany(mappedBy="troop")
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk")
public Troop getTroop() {
...
}
Я борюсь с документацией по этому поводу:
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.
так, например, следующий код:
Troup t = new Troup();
t.getSoldiers().add(soldier);
какая разница, если бы я просто позвонил session.saveOrUpdate(t)
, и если бы я просто позвонил
session.saveOrUpdate(s)
? MappedBy определяет труппу как владельца, но что конкретно это означает? Потому что я ожидал бы, что если я сохраню объект солдата, конечно, столбец troop_fk будет сохранен правильно? И если я просто спасу объект труппы, наверняка солдат иностранец ключ по-прежнему будет обновляться правильно при каскадировании? Я действительно не вижу разницы.
1 ответов
владелец-это сущность, которая устанавливает внешний ключ в базе данных при сбросе.
код:
Troup t = new Troup();
t.getSoldiers().add(soldier);
session.SaveOrUpdate(t);
session.Flush();
без каскадирования:
throws references transient instances
с каскадом и владельцем = troop
INSERT INTO troops (id, ...) VALUES (1, ...)
INSERT INTO soldiers (..., troop_fk) VALUES (..., NULL)
UPDATE soldiers SET troop_fk=1 <- troop sets its key
с каскадом и владельцем = солдат
INSERT INTO troops (id, ...) VALUES (1, ...)
INSERT INTO soldiers (..., troop_fk) VALUES (..., 1) <- soldier saves the reference