我遇到了本地人的问题,我不知道我做得对。
我有一个名为Aircraft的类,它有一个生成的id。但它的原生id是序列号(Integer)和Model(自定义类),如下所示:
public class Aircraft{
@Id @GeneratedValue(strategy=GenerationType.AUTO,generator="COD_NS_AENV")
@Column(name="COD_NS")
private Integer id;
@Column(name="NUM_IDENT_NS_AENV")
@NaturalId
private Integer serialNumber;
@ManyToOne
@NaturalId
private Model model;
.
.
.
}
我从XML加载此类并保存到数据库中,如下所示:
.
.
.
Aircraft aircraft= (Aircraft)xstream.fromXML(reader);
Session session = HibernateUtil.openSession();
Transaction t = session.beginTransaction();
session.saveOrUpdate(aircraft.getModelo());
session.saveOrUpdate(aircraft);
t.commit();
session.close();
它适用于插入,但我的问题是当我用相同的信息再次执行此代码时,Hibernate插入另一架飞机。我希望Hibernate只更新当前的注册表。
我重写了方法equals()来测试serialNumber和Model属性,但它永远不会被调用。
我不知道如何让Hibernate明白具有serialNumber和model的对象是NativeId。
提前致谢!
亚历山大
答案 0 :(得分:0)
很可能Hibernate只使用@Id
属性并且每次都会生成新值。发生这种情况是因为你从XML读取你的对象而id不是XML,我假设。我不认为自然id会与代理自动生成的id共存。对于saveOrUpdate
,Hibernate只会查看id
以确定对象是否是新的。
以下是Hibernate forums的详细信息。