关系所有者在Hibernate中意味着什么?

mog*_*lol 7 hibernate hibernate-mapping

@Entity
public class Troop {
    @OneToMany(mappedBy="troop")
    public Set<Soldier> getSoldiers() {
    ...
}

@Entity
public class Soldier {
    @ManyToOne
    @JoinColumn(name="troop_fk")
    public Troop getTroop() {
    ...
}       
Run Code Online (Sandbox Code Playgroud)

我正在努力解决这方面的问题:

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.
Run Code Online (Sandbox Code Playgroud)

例如,以下代码:

Troup t = new Troup();
t.getSoldiers().add(soldier);
Run Code Online (Sandbox Code Playgroud)

如果我刚刚打电话session.saveOrUpdate(t),如果我刚刚打电话, 会有什么不同session.saveOrUpdate(s)?MappedBy将troup定义为所有者,但这具体意味着什么?因为我希望如果我保存士兵对象,肯定会保存troop_fk列吗?如果我只保存troup对象,那么当级联时,士兵外键肯定会正确更新吗?我真的看不出差异.

Fir*_*iro 5

所有者是在刷新时在数据库中设置外键的实体。

代码:

Troup t = new Troup();
t.getSoldiers().add(soldier);
session.SaveOrUpdate(t);
session.Flush();
Run Code Online (Sandbox Code Playgroud)

没有级联:

throws references transient instances
Run Code Online (Sandbox Code Playgroud)

具有级联且所有者 = 部队

INSERT INTO troops (id, ...) VALUES (1, ...)
INSERT INTO soldiers (..., troop_fk) VALUES (..., NULL)
UPDATE soldiers SET troop_fk=1    <- troop sets its key
Run Code Online (Sandbox Code Playgroud)

具有级联且所有者 = 士兵

INSERT INTO troops (id, ...) VALUES (1, ...)
INSERT INTO soldiers (..., troop_fk) VALUES (..., 1) <- soldier saves the reference
Run Code Online (Sandbox Code Playgroud)