4

我正在与 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 表现在不存在,并且关系将消失。但是,在我看来,图像表没有被删除,但产品表正试图被删除和重建。这可能会导致外键约束出现问题。如果它的模型不再存在,为什么 Play 不会删除该表?

4

2 回答 2

0

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

于 2012-09-10T04:08:30.523 回答
0

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

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

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

于 2012-09-10T05:36:19.050 回答