Что означает владелец отношений в 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