2013-02-27 60 views
2

我正在从文本文件(一个招标文件)源中加载标书列表,我想将其存储到数据库中。我有表address_point,街道,城市和国家,其中address_point是从许多表(组织,招标,...)。休眠 - 重复键上的自动填充记录ID

Scheme

当脚本加载数据,并尝试保存相同的地址在失败,错误一个交易 - 重复键。

例如,脚本将添加新的投标并且投标由新公司所有。新招标公司和新公司具有相同的地址,并且这两个对象被插入到一个事务中,并且它们都包含相同的城市已经存储在数据库中的地址,所以首先我必须找到该组织的城市并将其替换为找到的对象或设置主要关键,并做同样的投标。

下一个示例脚本将添加新的投标和新的组织,而不存储在数据库中的城市,我必须检查城市是否在数据库中。下一步是我必须对这两个城市进行比较,如果城市相同,避免重复密钥,那么从这两个城市制造一个对象。

但我有三次以上的refenreces来处理投标,组织,旅游等交易中的点。这两个例子仅适用于不适用于国家,地区的城市......因此,制定一系列条件非常麻烦。

如何解决这个问题最有效的方法是什么?我已经定义了isEqueal和hashCode,但我已经读过这些方法仅适用于集合。

回答

0

我不认为isEqual和hashCode是你在这里寻找的必然,实现Comparable接口可能更适合。

我从你的文章中得到的印象是,你正在用相同的值创建新的(尚未附加到hibernate会话)对象,然后尝试保存它们。也许您可以在保存之前识别这些重复的案例,并且在保存之前将您的公司和招标引用同一个POJO。