1

我尝试在一个实体中创建关系(一个表中的 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。

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

4

1 回答 1

1

猜测最好的办法是删除你的数据库并再次运行。似乎您有 hibernate/jpa impl 设置来生成您的数据库方案,但是代码和表太多不同步了。您的表中可能有一个“悬空”字段。

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

于 2012-05-16T20:00:19.690 回答