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

当@GenerateValue添加到实体时,为什么Hibernate不创建我的表?,hibernate,annotations,Hibernate,Annotations,我有一个由postgresql支持的4个实体的应用程序。当我在id字段上没有@GenerateValue注释的情况下运行应用程序时,所有表都可以很好地创建,但是如果我添加它并启动,我会得到一个巨大的堆栈跟踪,它基本上告诉我,我的关系不存在 我会说:“嗯,你应该让他们存在” 我的配置中有正确的生成内容,这一点可以从以下事实中明显看出:当注释被关闭时,表被生成 下面是我的一些实体的一些更改代码: @Entity @Table(name = "MyClass",uniqueConstraints=@U

我有一个由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>();
@实体
@表(name=“PARENT”,uniqueConstraints=@UniqueConstraint(columnNames={“name”}))
公共类MyParentClass实现可序列化{
静态最终长SerialVersionId=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
字符串名称=”;
@OneToMany(mappedBy=“家长”)
@级联({org.hibernate.annotations.CascadeType.ALL})
@LazyCollection(LazyCollectionOption.FALSE)
private Set children=new HashSet();

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

没有stacktrace,很难说这是唯一的问题,但是

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

似乎是错误的。没有列名称和父级,而是有列名称为mapName和parent_id。

问题是我的配置中使用了错误的hibernate方言。设置为MYSQL,这对我正在做的很多事情都起到了作用,而且我没有看到有关它的警告。值得保留这一点,以防出现这种情况p表示其他人。

您可以发布堆栈跟踪吗?您是否正在使用带spring的hibernate?