Hibernate很多很多链接到现有记录

时间:2011-05-31 04:49:38

标签: hibernate jpa many-to-many

我有两个实体之间的多对多关系:Item和ItemCategory

在课程项目

@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(
        name="LINK_ITEM_CATEGORY",
        joinColumns={@JoinColumn(name="ITEM_ID")},
        inverseJoinColumns={@JoinColumn(name="CATEGORY_ID")}
        )
private Set<ItemCategory> associatedCategories = new HashSet<ItemCategory>();   

在类ItemCategory

@Column(name="NAME")
private String name;

@ManyToMany(mappedBy="associatedCategories")
private Collection<Item> comprisesExpenditure = new ArrayList<Item>();

每当我尝试保存项目时,即使数据库中存在相同associatedCategories的类别,也会保存添加到集name的类别。 hibernate是否有某种方法可以基于name搜索类别并创建与现有类别的链接,而不是创建新的类别并将项目与新项目链接。

2 个答案:

答案 0 :(得分:2)

要使其正常工作,您必须正确实现hashCode和equals方法。如果没有这个HashSet可能会出现不可预测的行为。

答案 1 :(得分:1)

没有。由于name不是类别的ID,因此您可能具有相同名称的severa类别。您可以添加一个唯一约束,但Hibernate不能神奇地知道您在集合中添加的ne类别实际上应该是具有相同名称的现有类别。

创建类别并将其添加到集合时,您应该搜索具有相同名称的类别,如果存在,则将此现有类别放入集合中而不是新集合。