将相同的对象添加到Set <e> </e>

时间:2014-10-22 18:13:57

标签: java hibernate set equals hashcode

如何让我的代码将相同的对象添加到SET?我想我将不得不使用hashcode()或equal()函数。

Class Order {

private id;
private Set<Discount>;

} 

Class Discount {

private id;
private Long amount;
}

现在如果我尝试保存每个1美元的两个折扣,SET只显示一个折扣。当hibernate保存它时,折扣会有不同的ID,但它们与现在相同。不想改变Order类的定义,因为它是一个大项目而且变化将是无止境的

2 个答案:

答案 0 :(得分:1)

根据JavaDoc for the Set interface,不允许一个集合包含重复的相同元素(由equals和hashcode定义)。虽然这可以在hibernate保存折扣时工作正常(因为你说ids会有所不同),现在ids是一样的,所以你想要完成的事情是不可能的,如果不做那些将来会被困住的人你的代码会恨你。

由于您不希望更改Order类,因此您最好的办法是追溯性地将折扣上的ID更改为唯一。

答案 1 :(得分:0)

您不能将相同的对象添加到集合中,因为这是集合的要点。集合包含独特的元素。你最好使用列表或地图。