0

我有一个小模式,由 jpa2 映射的 ~10 个类组成,hibernate 作为提供者。所有类都以相同的基本方式构建(@Entity类的注释,id@Id@GeneratedValue)。所有类都有默认的构造函数和默认的 getter/setter。

除了一个类之外,所有类都相互关联(通过关联或继承)。而这一类在模式生成过程中并没有得到数据库中创建的数据库表。

我尝试了以下设置hbm2ddl.auto

create:创建除一个之外的所有表。当第一次访问实体时抛出异常:(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table '...' doesn't exist如果代码在 Oracle DB 上运行,则为 oracle 等效项)。

validate:hibernate 在模式验证期间抱怨丢失的表。

update:表没有被创建,并且在第一次访问该类的实体时抛出异常(如 create)。

有人对此有任何想法吗?

4

2 回答 2

1

尝试以下操作:将该实体的类修改为仅具有 id 字段。确保类在 id 字段中使用@Entity 进行注释,并使用@Id 进行注释。确保该实体在映射类列表中声明(或在映射包中声明的包中)。通过 log4j.xml 将“TRACE”级别的日志记录添加到“org.hibernate”。启动一个休眠会话(启动您的应用程序),并在日志中查找 Hibernate 为创建模式而生成的语句。如果那里缺少表,那么您没有正确配置 bean,并且 hibernate 没有将其视为模型的一部分。如果有创建对应表的sql,但是执行的时候出错了,看看那个sql到底包含什么,这可能会帮助您找出 hibernate 不喜欢什么。当最终创建“空”bean 时,开始一次添加一个属性/关联,并像以前一样重做相同的检查。在某些时候,当您添加某些内容时会出现错误,您需要从那里寻找解决方案。

于 2011-11-14T14:53:29.883 回答
0

愚蠢的,愚蠢的我。我使用了一个 sql 关键字(更新)作为类的成员变量的名称。

我以为 ORA-01747 消息想告诉我选择失败,但仔细观察发现它实际上指出了为什么根本没有创建表。

于 2011-11-14T14:59:08.727 回答