Play 2.1 框架未检测到进化变化

Posted

技术标签:

【中文标题】Play 2.1 框架未检测到进化变化【英文标题】:Play 2.1 framework not detecting evolution changes 【发布时间】:2013-04-06 17:47:47 【问题描述】:

在将@ManyToMany 连接表添加到两个模型(在本例中为 User 和 Article 模型[1])时,Play 正确检测到这些更改并相应地修改 1.sql[2] 文件:

[1]
+    @ManyToMany
+    public List<User> authors;

+    @ManyToMany(mappedBy="authors")
+    public List<Article> authoredArticles;

[2]
+    create table articles_users (
+      articles_id                    bigint not null,
+      users_id                       bigint not null,
+      constraint pk_articles_users primary key (articles_id, users_id)
+    );

+    alter table articles_users add constraint fk_articles_users_articles_01 foreign key (articles_id) references articles (id);
+    alter table articles_users add constraint fk_articles_users_users_02 foreign key (users_id) references users (id);

# --- !Downs

+    drop table if exists articles_users cascade;

但是,当打开使用此关系的页面时,没有显示关于 Evolutions 需要应用的消息,而是显示以下错误:

PersistenceException: Query threw SQLException:ERROR: relation "articles_users" does not exist

为什么 Play 没有检测到它对需要应用的数据库架构进行了更改?

【问题讨论】:

您在生产或开发环境中遇到过这个问题吗? 开发中,该应用目前尚未生产。 【参考方案1】:

检查 play_evolutions 表,如果已经有 id 为 1 的行,则必须将 sql 文件重命名为 2.sql 或手动删除表。

【讨论】:

以上是关于Play 2.1 框架未检测到进化变化的主要内容,如果未能解决你的问题,请参考以下文章

播放框架 2.4.3 进化未触发

从YOLOv1到YOLOv3,目标检测的进化之路

在 Play 中为 OneAppPerTest 中的每个测试重新创建数据库并进化

播放框架演变未运行

Play framework 2.0.1 不断尝试进化错误的数据库类型

在 Play 中,我可以根据数据库类型应用不同的进化吗?