我的数据库中有3个表,container
,item
和item_container
,这是容器和项目之间多对一的join_table。代码中的实体使用2个类进行映射:Container
和Item
。
该关系从Container
到Item
是明确无误的。
hibernate中的join_table仅由Container
类中的注释映射。
@Entity
@Table(name="container")
public class Container {
@Id
@Column(name = "container_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "item_container",
joinColumns = @JoinColumn(name = "container_id"),
inverseJoinColumns = @JoinColumn(name = "item_id"))
private Set<Item> items;
//getter/setters
}
我的问题是:当我将集合Set<Item> items
的类型更改为List<Item>
时,该列表包含每个Item实体两次。我找不到原因,Item的hashCode和equals方法仅基于item_id字段。
更新
Item类的代码:
@Entity
@Table(name = "item")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_id")
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "item_template_id", nullable = false)
private ItemTemplate itemTemplate;
@Column(name = "item_group")
@Enumerated(EnumType.STRING)
private ItemGroup itemGroup;
@Column(name = "amount")
private int amount;
//getter/setters
}