如何知道数据库何时准备就绪?

Posted

技术标签:

【中文标题】如何知道数据库何时准备就绪?【英文标题】:How to know when the database is ready? 【发布时间】:2012-07-31 20:08:57 【问题描述】:

有时 createEntitymanagerFactory 可能需要一段时间,特别是在需要创建数据库时。

我正在为我的数据库使用 Flyway,并开始在迁移过程中发现问题。查看日志似乎我正在尝试在创建表之前进行迁移。例如

Table "XINCO_CORE_USER" not found; SQL statement:
INSERT INTO `xinco_core_user` (`id`, `username`, `userpassword`, `last_name`, `first_name`, `email`, `status_number`, `attempts`, `last_modified`) VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator', 'Xinco', 'admin@xinco.org', 1, 0, now()) [42102-168]

JPA 设置为创建表。当我在 JPA 中启用日志时,它显示上述错误发生在 JPA 完成创建数据库之前。

有没有办法监听 JPA 数据库以了解它何时准备就绪?我只找到实体本身的侦听器,但没有找到 PersistenceManager 生命周期的侦听器。

【问题讨论】:

显然 JPA 与创建数据库无关。一些实现可能会提供这一点,但它不是 JPA。 【参考方案1】:

我认为最好的解决方案是让 Flyway 也创建表格,而不是与 JPA 共享工作。

看看this question and its chosen solution。在那里您可以看到如何将 Flyway 干净利落地绑定到 Hibernate 生命周期中。

话虽如此,我可能还没有意识到更好的方法。

【讨论】:

以上是关于如何知道数据库何时准备就绪?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 jQuery(替代方式)的情况下知道页面何时准备就绪? [复制]

在 React / Redux 中了解 UI 何时准备就绪

HTML - 我如何知道所有帧何时加载?

如何知道 QSerialPort 何时准备好接收 Qt5 中的更多数据?

AJAX 加载的 DOM 节点何时“准备好”?

在将内容附加到页面后,我如何知道 DOM 已准备就绪?