Hibernate OneToMany在一个实体中

时间:2012-05-16 19:43:23

标签: java hibernate

我尝试在一个实体中创建关系(OneToMany在一个表中,父 - 子关系),我有一个类:

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

}

加载数据效果很好但是当我尝试保存MenuItem时,我有以下错误:

“字段'childrens_id'没有默认值”

Hibernate尝试在MenuItem中保存相关值(我在日志中看到它),但是,我认为,它试图创建另一个,Join表和finnaly事务失败。

这是表现在: http://www.roseindia.net/hibernate/hibernate4/OnetoManySelfJoin.shtml 但没有工作。我使用了Hibernate 4.1.1和Tomcat服务器7。

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

1 个答案:

答案 0 :(得分:1)

猜测最好的事情是丢弃数据库并再次运行。看来你有hibernate / jpa impl设置来生成你的数据库方案,但代码和表格太不同步了。你的桌子里可能还有一块“晃来晃去”的字段。

作为旁注:“狂野”猜测:在您将其更改为上述代码之前,您已尝试@JoinColumn(name="childrens_id")? (与mappedBy值混淆?)