【问题标题】:Play framework - database create-drop issue播放框架 - 数据库创建删除问题
【发布时间】:2012-05-30 20:30:58
【问题描述】:

我正在与 Play 合作! 1.2.4,我遇到了一个奇怪的问题。

据我所知,如果我将配置中的 jpa.ddl 设置为 create-drop,它应该会删除我的表并重新构建并重新启动应用程序。

jpa.ddl=create-drop

我是否认为它只会删除和创建与已更改模型关联的表?我遇到了一个问题,我的模型已经改变,但它并没有丢表。我试图手动删除表格,但它不允许这样做,因为它Cannot delete or update a parent row: a foreign key constraint fails。我了解这个问题并解决它,我可以手动删除整个表并重新启动我的应用程序,以便它从头开始构建表。

我的问题是,这是 Play 的问题吗!有这就是它不更新该表的原因,如果是,有没有办法通过配置文件而不是手动删除我的表来解决它?

谢谢。

编辑

只是为了获得更多信息,我只是假设这是一个问题,并且可能完全不同,但这是我在日志中得到的:

Unsuccessful: create table Product
Table 'Product' already exists

我也刚刚意识到这个负载发生了变化。我曾经有过这样的关系

Product *-* Image

这是 Product 和 Image 表之间的多对多关系。 Image 表现在不存在,并且关系将消失。但是,在我看来,图像表没有被删除,但产品表正试图被删除和重建。这可能会导致外键约束出现问题。如果 Model 不再存在,Play 为什么不删除该表?

【问题讨论】:

    标签: mysql playframework playframework-1.x


    【解决方案1】:

    在开发模式下运行游戏? 但是为什么不使用 jpa.ddl=update 呢?

    【讨论】:

      【解决方案2】:

      使用 jpa 自动修改模式并不是最好的方法。 Play 提供了更可靠的进化机制,因为您指出了哪些变化。

      在您给出的示例中,如果您删除像 Image 这样的模型类,JPA 不再了解 Image 类,因此它不会删除 Image 表和 Product_Image 关系表。因此它不能删除 Product 表。在您更改模型之前,JPA 不知道数据库是什么。

      Evolution 在开始时使用起来有点乏味,因为您手动创建 Evolutions 文件,但使用这种机制,您的数据库结构正是您想要的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多