【发布时间】:2012-03-10 22:26:43
【问题描述】:
我的任务是准备一个报价搜索屏幕。我提到了一个 Oracle 视图 创建报价模型。由于视图表中没有 id 列,我更喜欢通过 quoteId.class 使用 @IdClass 注释来使用复合 id。我在两个模型上都覆盖了 hashCode 和 equals 方法。 quoteId equals & hashcode 返回所有字段的组合,quote hashcode & equals 只是比较模型中的 this.quoteNo 字段。
报价模型:
@Override
public int hashCode()
{
return new HashCodeBuilder(17,37)
.append(quoteNo)
.toHashCode();
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj)
{
final quoteModel other = (quoteModel ) obj;
return new EqualsBuilder().appendSuper(super.equals(other))
.append(quoteNo, other.quoteNo).isEquals();
}
当我需要独特的物品时,我只是通过以下方式访问:
uniqueQuoteResults = new ArrayList<Quote>(
new LinkedHashSet<Quote>(fullQuoteResults));
但是当我开始使用 idClass 时,我的linkedHashSet 包含所有项目,甚至它们的报价编号都相同。我是否缺少任何其他实现来通过引用无字段(可比较,比较器)来证明每个项目的唯一性?如果我跟踪 uniqueQuoteResult 列表项的值,它们都具有相同的报价编号。
编辑说明:我已经改变了使用 apache 库 HashCodeBuilder 和 EqualsBuilder 支持的方式,但问题仍然存在。我担心 idClass 哈希码对linkedhashset 生效
【问题讨论】:
标签: java hibernate jpa linkedhashset