0

我在使用 nativeid 时遇到问题,我不知道我是否做得对。

我有一个名为 Aircraft 的类,它有一个生成的 id。但它的本机 id 是序列号(整数)和模型(自定义类),如下所示:

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 和模型的对象是 NativeId。

提前致谢!

亚历山大

4

1 回答 1

0

很可能 Hibernate@Id每次只使用属性并生成新值。发生这种情况是因为您从 XML 读取对象并且 id 不在 XML 中,我假设。我认为自然 id 不会与代理自动生成的 id 共存。而对于saveOrUpdateHibernate 来说,它只会查看id来确定对象是否是新的。

这是有关Hibernate 论坛的更多详细信息。

于 2011-07-14T17:49:44.323 回答