【问题标题】:Why is one entity ignored during schema creation with JPA2?为什么在使用 JPA2 创建模式时忽略一个实体?
【发布时间】:2011-12-28 17:06:03
【问题描述】:

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

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

我用hbm2ddl.auto尝试了以下设置:

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

validate:hibernate 在模式验证期间抱怨缺少表。

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

有人对此有任何想法吗?

【问题讨论】:

  • 能贴出失败实体的源码吗?
  • 您使用的是特定于 Hibernate 的配置,还是 JPA persistence.xml 格式?请在您的问题中包含配置。

标签: java hibernate jpa-2.0 hbm2ddl


【解决方案1】:

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

【讨论】:

  • 我现在以不同的方式发现了错误,但您的建议也会导致解决方案。非常感谢。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2013-05-02
    • 2016-02-11
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2011-11-08
    • 2021-06-08
    相关资源
    最近更新 更多