我有一个由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的问题?
答案 0 :(得分:1)
如果没有堆栈跟踪,很难说这是唯一的问题,但是
uniqueConstraints=@UniqueConstraint(columnNames={"name","parent"})
似乎是错的。没有列 name 和 parent ,而是有名为mapName和parent_id的列。
答案 1 :(得分:0)
问题是我的配置中有错误的hibernate方言。被设置为MYSQL,这对我正在做的很多事情感到担忧,我没有看到它的警告。值得保留这个,以防万一其他人出现。