我有一个非常简单的设置来尝试与注释的双向映射:休眠双向@ManyToOne,更新不拥有侧不工作
@Entity
public class TypeA extends AbstractModel<TypeA> {
@Id
@GeneratedValue
private int id;
@OneToMany(mappedBy="a")
private Collection<TypeB> bs;
// Getters & Setters ...
}
和
@Entity
public class TypeB extends AbstractModel<TypeB> {
private static final long serialVersionUID = -3526384868922938604L;
@Id
@GeneratedValue
private int id;
@ManyToOne()
@JoinColumn(name="a_id")
private TypeA a;
}
当我设置属性TypeA.bs这不会影响映射,尽管它应该。请参阅以下示例:
TypeB b = new TypeB();
this.typeBDao.save(b);
TypeA a = new TypeA();
a.setBs(ListUtils.createList(b));
System.out.println(a.getBs()); // output: [[email protected]]
this.typeADao.save(a);
System.out.println(a.getBs()); // output: [[email protected]]
this.typeADao.refresh(a);
System.out.println(a.getBs()); // output: []
this.typeBDao.refresh(b);
System.out.println(b.getA()); // output: null
如果映射是双向的,则应该填充集合并且b的属性a应该更新,但它不是。有任何想法吗?
编辑感谢您的帮助,现在我明白了!
这是正常的,请参阅我在此线程中的回答以及名称'mappedBy'和'拥有方'的原因,如果我们没有定义拥有方,GOTCHAs会发生什么情况 - http://stackoverflow.com /问题/ 2749689 /什么,是最拥有方 - 中安-ORM映射/ 21068644#21068644 – 2014-01-12 22:02:46