我有一个小模式,由jpa2映射的~10个类组成,hibernate作为提供者。所有类都以相同的基本方式构建(@Entity
注释为类,id为@Id
和@GeneratedValue
)。所有类都有默认的构造函数和默认的getter / setter。
除了其中一个类之外,其他所有类都是相互关联的(通过关联或继承)。这个类在模式生成过程中没有获得在数据库中创建的数据库表。
我已使用hbm2ddl.auto
尝试了以下设置:
创建:创建除了一个表之外的所有表。当第一次访问实体时会抛出异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table '...' doesn't exist
(如果代码在Oracle DB上运行,则为oracle等效项)。
验证:hibernate在架构验证期间抱怨缺少的表。
更新:表格未创建,并且在第一次访问该类的实体时抛出异常(如使用create)。
有人对此有任何想法吗?
答案 0 :(得分:1)
尝试以下操作:将该实体的类修改为仅具有id字段。确保在id字段中使用@Entity注释类,并使用@Id进行注释。确保此实体在映射类列表中声明(或者在映射包中声明的包中)。通过log4j.xml将“TRACE”级别日志记录添加到“org.hibernate”。启动一个休眠会话(启动你的应用程序),并在日志中查看Hibernate为创建模式而生成的语句。如果那里缺少表,那么你没有正确配置bean,而hibernate并不认为它是模型的一部分。如果用于创建相应表的sql存在,但执行时出现错误,请查看SQL实际包含的内容,这可能会帮助您找出hibernate不喜欢的内容。当最终创建“空”bean时,开始一次添加一个属性/关联,并重做与之前相同的检查。在某些时候,当你添加某个东西时会出现错误,你需要从那里寻找解决方案。
答案 1 :(得分:0)
愚蠢,愚蠢。我使用了sql-keyword(update)作为类的成员变量的名称。
我假设ORA-01747消息想要告诉我有关选择失败的信息,但仔细观察后发现它确实指出了为什么表根本没有创建。