Java 表不是由Hibernate创建的

Java 表不是由Hibernate创建的,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我注释了一些POJO,以便JPA可以使用它们在Hibernate中创建表。似乎所有的表格都是创建的,除了一个非常中心的名为“修订”的表格。修订类有一个@Entity(name=“RevisionT”)注释,因此它将被重命名为RevisionT,这样就不会与MySQL(目标数据库)中的任何保留字发生冲突 我删除整个数据库,重新创建它,基本上打开和关闭一个JPA会话。所有的表似乎都可以毫无问题地重新创建 为什么创建的架构中缺少一个表?可以使用什么工具来查看Hibernate产生了什么以及哪些错误 谢

我注释了一些POJO,以便JPA可以使用它们在Hibernate中创建表。似乎所有的表格都是创建的,除了一个非常中心的名为“修订”的表格。修订类有一个
@Entity(name=“RevisionT”)
注释,因此它将被重命名为RevisionT,这样就不会与MySQL(目标数据库)中的任何保留字发生冲突

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

为什么创建的架构中缺少一个表?可以使用什么工具来查看Hibernate产生了什么以及哪些错误

谢谢

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

以下是可疑注释的示例


    @ManyToOne
    @JoinColumn(name="MasterTopID")
    @IndexColumn(name="Cx3tHApe")
    protected MasterTop masterTop;
它不是创建
MasterTop.cx3hape
作为字段,而是创建
MasterTop.Index
。为什么名称被忽略?

on
@Entity
不是用于此目的的。改为使用
@表
注释:

@Entity
@Table(name="RevisionT")
public class Revision {

也许您使用了错误的注释。有一次我不小心用
@org.hibernate.annotations.entity
而不是
@javax.persistence.entity
注释了一个实体,hibernate跳过了它。

回答你的附带问题(可以使用什么工具来查看hibernate产生了什么和哪些错误?)

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

AnnotationConfiguration conf = (new AnnotationConfiguration()).configure();
new SchemaExport(conf).create(showHql, run);
第一个参数允许您查看此命令生成的HQL(
createtable
s等)。第二个问题是它是否应该实际执行任何修改(即假=干运行)


因此,使用
(true,false)
运行它将准确地向您显示Hibernate将对您的表执行什么操作,而不会更改任何内容。

如果这对任何人都有帮助,今天我遇到了这种情况,结果发现我在实体定义中使用了保留字:

@OneToMany(mappedBy="list")
@OrderColumn(name="order")
private List<Wish> wishes;
@OneToMany(mappedBy=“list”)
@OrderColumn(name=“order”)
私人名单愿望;
在本例中是“order”,Hibernate只是跳过了这个类。因此,请检查您的用户定义名称!:)

干杯,
标记

这是由于列名与基础数据库sql保留字匹配……请尝试更改列名……更改列名时我也遇到了同样的问题,但它确实有效。

对我来说,这是columnDefinition中的语法错误。调试日志很容易检测到。

将hibernate.show\u sql config属性设置为true,并查看hibernate是否生成了创建表代码。如果是这样,请将create语句复制到数据库客户机(ui或命令行)中,并查看数据库是否返回错误

对我来说,在我这么做之前,这个错误并不明显

我使用了字段名'condition',它是一个保留的MySQL字。
所以请检查您的字段名…

好主意。这没用(我正在使用@javax.persistence.Entity。但是,我确实有一个org.hibernate.annotations.IndexColumn。混合注释会导致问题吗?这非常有帮助!我发现仍然有一个名为“Index”的列正在创建中。进一步的调查显示,模式的@OneToMany端也有@IndexColumn(name=“Index”).Hibernate忽略了@ManyTone上的@IndexColumn。我仍然想知道为什么Hibernate没有输出。哦,好吧。它工作了!哈哈,我很高兴这有帮助:)谢谢你节省了我的时间:)