具有两个查找值的Hibernate OnetoOne映射

时间:2011-03-07 22:10:07

标签: java hibernate persistence

我有一个有两个查找值的类(一个用于名称,一个用于类型)

public class someAttr {
private Long someAttrId;
private Long projectId;

private Lookup typeLookupValue;
private Lookup nameLookupValue;

getters & setter...

@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "type_lk_id", referencedColumnName = "lk_id", insertable = false, updatable = false)
public LookupValue getTypeLookupValue() {
    return typeLookupValue;
}

public void setTypeLookupValue(Lookup typeLookupValue) {
    this.typeLookupValue= typeLookupValue;
}

@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "name_lk_id", referencedColumnName = "lk_id", insertable = false, updatable = false)
public LookupValue getNameLookupValue() {
    return nameLookupValue;
}

public void setNameLookupValue(Lookup nameLookupValue) {
    this.nameLookupValue= nameLookupValue;
}

问题是在不同的someAttr对象之间共享相同的name_lk_id。 每次我运行它我得到: “org.hibernate.HibernateException:找到了多个具有给定标识符的行”。

我可以使用projectId获取属于特定someAttr的nameLookupValue,而不是使用相同的“lk_id”获取多个Lookup对象吗?

1 个答案:

答案 0 :(得分:2)

一个someAttr实例与两个Lookup值实例相关联。这不是一对一的关系。您需要使用One-to-Many关系。您可以在类中使用辅助方法从List / Set中检索approrpiate Lookup实例。