Hibernate @ManyToOne注释仅创建引用现有父表的子项

时间:2013-07-06 09:25:53

标签: hibernate postgresql nhibernate jpa

我目前正在开展一个项目,我必须使用多种关系。我想从DB中的现有表中检索父级并映射到新的子对象。但每次我这样做都失败了,而是试图重新创建父母。这是变量声明:

@Entity @Table (name= "children")
public class Child implements Serializable{
@ManyToOne (fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST})
@JoinColumn (name = "parent_id",referencedColumnName = "id")
private Parent parent;
}

每次我创建一个新的子记录时,它都会尝试创建一个新父级,其中包含从数据库中提取的现有父级数据,从而导致出现此错误:

duplicate key value violates unique constraint "parents_parent_name_key"
Detail: Key (parent_name)=(Jimmy) already exists.

Batch entry 0 insert into parents(parent_name, id) values ('Jimmy', '13')     was
aborted.  Call getNextException to see the cause.

然后,如果我尝试重做这个,我会得到一个不同的错误:

org.hibernate.PersistentObjectException: detached entity passed to persist:
com.house.entity.Parent

谢谢yiu

1 个答案:

答案 0 :(得分:0)

我能够解决它。问题是我为两个表和其他表使用了一个序列。如果您的实体之间存在多个关系,并且希望在一个实例上保留数据,请不要这样做。当我改变它,它工作正常。