Hibernate加载列表集合两次

时间:2016-11-23 13:34:58

标签: java hibernate collections

我的数据库中有3个表,containeritemitem_container,这是容器和项目之间多对一的join_table。代码中的实体使用2个类进行映射:ContainerItem。 该关系从ContainerItem是明确无误的。 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
}

0 个答案:

没有答案