@Entity
public class Troop {
@OneToMany(mappedBy="troop")
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk")
public Troop getTroop() {
...
}
我这样做:
Troup t = new Troup();
t.getSoldiers().add(soldier);
这也节省了部队和士兵。由于士兵是所有者,因此也添加了外键。但哪一个更好的方式,我的意思是保存toop或士兵使用:
Troop t = ..... // Get troop from session
Soldier s = new Soldier();
s.setTroop(t);
答案 0 :(得分:1)
两种方法都会得出相同的结果。但是,我认为保存单个Soldier
实体的效率会更高一些:
Soldier
表无论如何都会更新。 但是,也许您应该考虑哪种业务概念更合适,这意味着您是否在应用程序中使用个人Soldiers
或Troops
。
Soldier
添加到Troop
或Troop
分配给Soldier
差异可能很微妙,但根据您的业务案例,任何一个可能是更易读和易于理解的解决方案。
答案 1 :(得分:1)
因为您有双向关联,所以强制设置此关联的两面。你不应该只设置一方,而另一方则处于不一致的状态。
如果要将其更改为单向关联,则@ManyToOne方面的管理效率更高:
Troop t = .....
Soldier s = new Soldier();
s.setTroop(t);
使用@OneToMany方将要求您在添加新元素之前获取Set。这是强制性的,因为Set不允许重复,因此需要初始化集合以强制执行唯一性策略。
总而言之:
对于双向关联,您应该设置双方。只设置一侧可能会导致非常微妙的错误。
@ManyToOne单向关联比@OneToMany单向关联更好。