Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA EclipseLink表创建顺序_Jpa_Eclipselink - Fatal编程技术网

JPA EclipseLink表创建顺序

JPA EclipseLink表创建顺序,jpa,eclipselink,Jpa,Eclipselink,我有一个正在工作的项目,它使用JPA在MySQL上持久化数据(EclipseLink作为提供者)。最近,我想通过Eclipse=>EclipseLink“从实体生成表”删除数据库并使用表再次创建它。我还更新了persistence.xml(首先自动生成,然后手动修改以缩小此问题的范围) (实体类定义了表名: @实体 @表(name=“难度”)) 如果我从persistence.xml中注释掉“Options”,那么“难点”表就可以创建了。然后再次取消对“Options”的注释并重新生成表=>也将

我有一个正在工作的项目,它使用JPA在MySQL上持久化数据(EclipseLink作为提供者)。最近,我想通过Eclipse=>EclipseLink“从实体生成表”删除数据库并使用表再次创建它。我还更新了persistence.xml(首先自动生成,然后手动修改以缩小此问题的范围)

(实体类定义了表名: @实体 @表(name=“难度”))

如果我从persistence.xml中注释掉“Options”,那么“难点”表就可以创建了。然后再次取消对“Options”的注释并重新生成表=>也将创建“Options”表(Options具有@manytone关联,难度很大)

在persistence.xml中

<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
(许多选项被认为具有相同的选择难度,因此没有一个选项真正具有相同的难度。我希望这是正确的?)

在成功创建了难度和选项表之后,我能够重新创建其余的数据库表

  • 问题是我应该(能够)指定创建表的顺序吗
  • 我的@ManyToOne协会有什么问题吗
  • 在这个问题上已经花了几个小时,但无法找出问题所在

    抱歉这么长的文字,我只是想解释一下整个情况。
    上次我收到“tl”;博士答案(当时我不知道这是什么意思),我花了6个小时寻找错误的东西,所以在这种情况下请不要费心回答。

    您是否在上次创建之间更改了类/模式?可能是您添加或删除了新的关系,因此EclipseLink无法删除旧的约束

    对于drop和create tables,EclipseLink将基本上执行以下操作:

    • 删除已知约束
    • 删除已知表
    • 创建已知表
    • 创建已知约束

    在最新版本中,EclipseLink将尝试几次删除过程来尝试和处理未知的约束,但快速变化的开发模式的最佳方法是在两次部署之间删除整个模式。

    如果查看异常堆栈,您将看到它来自实体的默认构造函数。此构造函数试图通过获取entitymanager来发出查询,但由于所需的表尚不存在而失败。当您创建一个表时,构造函数可以查询它,这允许一切继续进行


    默认构造函数中不应包含业务逻辑。这由提供程序使用,并在DDL之前的部署期间被调用。删除将解决此问题。

    是否可以发布完整的错误和堆栈?create语句有什么问题?下面是完整的堆栈跟踪。抱歉耽搁了。无法更早地获得它。约束的问题听起来似乎有道理,但问题是我在创建全新数据库(创建空数据库+用户)之前删除了整个数据库。我想看到,当db还不存在时,它可以从头开始创建(当这个游戏第一次运行时的情况)。我希望在这种情况下创建工作会很容易,但是却出现了这个错误(因为其他所有内容都被注释掉了,所以只需要创建两个表),我必须检查“drop database”是否足够。如果没有使用“drop db”,可能我需要单独删除模式?嗯,测试速度很快。在“drop database xxx”之后,我运行了“drop schema xxx”,得到了:错误1008(HY000):无法删除数据库“xxx”;数据库不存在创建“难度”表后,我将能够同时创建所有其他表。这就解释了。我试图让它更早地自动生成表(当时没有成功)。我想我已经删除了它,但无法从错误中找出它(显然还留下了一些东西)。
    Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'xxx.DIFFICULTY' doesn't exist
    Error Code: 1146
    
    <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
    
    @ManyToOne(optional = false, cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
    private Difficulty difficulty = null;