当@GenerateValue添加到实体时,为什么Hibernate不会创建我的表?

时间:2012-03-27 11:42:32

标签: hibernate annotations

我有一个由postgresql支持的4个实体的应用程序。当我在我的id字段上没有@GenerateValue注释的情况下运行应用程序时,表格都可以正常创建,但是如果我添加它并启动,我会得到一个庞大的堆栈跟踪,它基本上告诉我我的关系不存在。

而且我都喜欢:“好吧!你应该让它们存在”

我的配置中有正确的生成内容,这显然是在注释被关闭时生成表格的事实。

以下是我的一些实体的一些更改代码:

@Entity
@Table(name = "MyClass",uniqueConstraints=@UniqueConstraint(columnNames={"name","parent"}))
public class MyClass implements Serializable {


@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String mapName = "";

@ManyToOne
@JoinColumn(name = "parent_id")
private MyParentClass parent;

它是父母:

@Entity
@Table(name = "PARENT",uniqueConstraints=@UniqueConstraint(columnNames={"name"}))
public class MyParentClass implements Serializable {
static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

String name = "";

@OneToMany(mappedBy = "parent")
@Cascade({ org.hibernate.annotations.CascadeType.ALL })
@LazyCollection(LazyCollectionOption.FALSE)
private Set<MyClass> children = new HashSet<MyClass>();

我做错了什么,或者这是Hibernate的问题?

2 个答案:

答案 0 :(得分:1)

如果没有堆栈跟踪,很难说这是唯一的问题,但是

uniqueConstraints=@UniqueConstraint(columnNames={"name","parent"})

似乎是错的。没有列 name parent ,而是有名为mapName和parent_id的列。

答案 1 :(得分:0)

问题是我的配置中有错误的hibernate方言。被设置为MYSQL,这对我正在做的很多事情感到担忧,我没有看到它的警告。值得保留这个,以防万一其他人出现。