2012-05-16 86 views
1

我尝试在一个实体(一对多在一个表中,父母 - 子女关系)来创建关系,我有一个类:Hibernate的一对多在一个实体

public class MenuItem { 
@Id 
@GeneratedValue 
private long Id; 
private String content; 
private String name; 

@ManyToOne(cascade = { CascadeType.ALL }) 
@JoinColumn(name="parent") 
private MenuItem parent; 

@OneToMany(cascade = CascadeType.ALL, mappedBy="parent") 
private Set<MenuItem> childrens = new HashSet<MenuItem>(); 

//getters and setters 

} 

加载数据的工作很好,但是当我尝试保存菜单项,我有以下错误:

“场‘childrens_id’没有默认值”

Hibernate试图保存菜单项correst值(我看到它在日志),但是,我认为,其试创建另一个,Join表和finnaly事务失败。

这是exacly显示在: http://www.roseindia.net/hibernate/hibernate4/OnetoManySelfJoin.shtml 但无法正常工作。我使用了Hibernate 4.1.1和Tomcat服务器7.

已解决:删除并再次创建数据库。

回答

1

推测最好的办法是放弃数据库并重新运行。看起来你已经有了hibernate/jpa impl的设置来生成你的数据库方案,但是代码和表格有太多的不同步。你的桌子上可能有一个“摇晃”的字段。

作为一个附注:“狂野”猜测:在您将其更改为上面的代码之前,您有@JoinColumn(name="childrens_id")的尝试吗? (与mappedBy值混淆?)

+0

我丢弃并重新创建数据库,它正在工作。非常感谢! 在此之前,我尝试了一些其他的东西,值(JoinColumn也:))等,因此可能是这个错误。 Registers Adam Adam –

+0

这是一个常见的错误,这里很好地解释http://ondra.zizka.cz/stranky/programovani/java/hibernate-common-errors-and-exceptions.texy。 – Yanflea

相关问题