我有一個非常簡單的設置來嘗試與註釋的雙向映射:休眠雙向@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