以双向多对一关系从非所有者方更新实体

时间:2011-09-08 12:53:58

标签: hibernate jpa spring-roo

我在Spring Roo中定义了两个实体之间的双向多对一关系。

@RooEntity
public class Car {

  @OneToMany(mappedBy="car")
  private Set<Wheel> wheels = new HashSet<Wheel>();

}

@RooEntity
public class Wheel {

  @ManyToOne
  @JoinColumn (name = "wheels_fk")
  private Car car;

}

所有者方(轮)的更改将保留。

当我尝试从Car-entity更新任何东西时,它不起作用。

我该怎么办?

1 个答案:

答案 0 :(得分:3)

答案是问题:协会的所有者方是Wheel,而Hibernate只会使用所有者方来决定是否存在关联。更新非所有者方时应始终更新所有者方(反之亦然,如果您需要连贯的对象图)。最强大的方法是将其封装在Car实体中:

public void addWheel(Wheel w) {
    this.wheels.add(w);
    w.setCar(this);
}

public void removeWheel(Wheel w) {
    this.wheels.remove(w);
    w.setCar(null);
}

public Set<Wheel> getWheels() {
    // to make sure the set isn't modified directly, bypassing the 
    // addWheel and removeWheel methods
    return Collections.unmodifiableSet(wheels);
}