【发布时间】:2013-03-03 08:43:23
【问题描述】:
我有一个使用 JPA 将数据持久保存在 MySQL 上的工作项目(EclipseLink 作为提供者)。最近我想删除数据库并通过 Eclipse => EclipseLink '从实体生成表'使用表再次创建它。我还更新了 persistence.xml(首先自动生成,然后手动修改以缩小此问题的范围)。
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>xxx.entity.options.Difficulty</class>
<class>xxx.entity.options.Options</class>
(省略其余部分,因为其他情况都可以=>它一般都在工作)
问题是当我生成表格时出现错误:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'xxx.DIFFICULTY' doesn't exist
Error Code: 1146
(实体类定义了表名: @实体 @Table(name = "难度"))
如果我从persistence.xml 中注释掉'Options','DIFFICULTY' 表就可以正常创建。然后再次取消注释“选项”并重新生成表格 => 还将创建“选项”表格(选项与难度有 @ManyToOne 关联)。
在我的persistence.xml中
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
因为我还在开发中。
在我的 Options 类中
@ManyToOne(optional = false, cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
private Difficulty difficulty = null;
(假设许多选项选择了相同的难度,所以没有一个真正拥有一个。我希望这是正确的?)
成功创建难度表和选项表后,我能够重新创建其余的数据库表。
- 问题是我应该(能够)指定创建表的顺序吗?
- @ManyToOne 关联有问题吗?
已经在这个问题上花费了几个小时,但无法弄清楚问题所在。
抱歉,文字太长了,我只是试着解释一下整个情况。 上次我收到 'tl;博士;'回答(当时不知道是什么意思),我花了 6 个小时寻找错误的东西,所以请不要在这种情况下回答。
【问题讨论】:
-
你能发布完整的错误和堆栈吗? create语句有什么问题?
-
这是完整的堆栈跟踪。 pastebin.com/Biz16Ux3 。抱歉耽搁了。没能早点拿到。
标签: jpa eclipselink