我尝试在一个实体中创建关系(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。
解决:再次删除并创建数据库。
答案 0 :(得分:1)
猜测最好的事情是丢弃数据库并再次运行。看来你有hibernate / jpa impl设置来生成你的数据库方案,但代码和表格太不同步了。你的桌子里可能还有一块“晃来晃去”的字段。
作为旁注:“狂野”猜测:在您将其更改为上述代码之前,您已尝试@JoinColumn(name="childrens_id")
? (与mappedBy值混淆?)