表不是由Hibernate创建的

Use*_*er1 4 java mysql hibernate jpa

我注释了一堆POJO,因此JPA可以使用它们在Hibernate中创建表.似乎除了一个名为"Revision"的非常中心的表外,所有表都被创建.Revision类有一个@Entity(name="RevisionT")注释,因此它将被重命名为RevisionT,因此不会与MySQL(目标数据库)中的任何保留字冲突.

我删除整个数据库,重新创建它,基本上打开和关闭JPA会话.所有的表似乎都没有问题地重新创建.

为什么创建的模式中缺少单个表?可以使用什么样的工具来查看Hibernate产生的内容以及哪些错误?

谢谢.

更新:我尝试创建一个Derby DB并且它成功了.但是,其中一个字段的名称为"index".我@org.hibernate.annotations.IndexColumn用来指定除保留字以外的名称.但是,该列在创建时始终称为"索引".

这是可疑注释的示例.


    @ManyToOne
    @JoinColumn(name="MasterTopID")
    @IndexColumn(name="Cx3tHApe")
    protected MasterTop masterTop;
Run Code Online (Sandbox Code Playgroud)

MasterTop.Cx3tHApe它创造了而不是创建一个领域MasterTop.Index.为什么这个名字被忽略了?

And*_*lla 5

回答你的问题(可以用什么工具来看看Hibernate产生了什么以及哪些错误?)

您可以org.hibernate.tool.hbm2ddl.SchemaExport生成表格.

AnnotationConfiguration conf = (new AnnotationConfiguration()).configure();
new SchemaExport(conf).create(showHql, run);
Run Code Online (Sandbox Code Playgroud)

第一个参数允许您查看此命令生成的HQL(CREATE TABLEs等).第二个是它是否应该实际执行任何修改(即假=干运行).

因此,运行它将(true, false)显示Hibernate将对您的表做什么,而不会更改任何内容.


mar*_*ldy 5

如果这有助于任何人,今天发生在我身上,事实证明我在我的实体定义中使用了保留字:

@OneToMany(mappedBy="list")
@OrderColumn(name="order")
private List<Wish> wishes;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,"顺序",Hibernate刚跳过这个类.所以检查用户定义的名称!:)

干杯,马克