我正在使用Play Framework(1.2.4)我创建了一个UserAccount
对象,并将其部署到Heroku。工作得很好。然后我在isAdmin
类中添加了UserAccount
字段,在本地部署它并且工作正常(但我使用的是内存中的数据库),然后我将它部署在Heroku上,现在我就是得到以下异常:
2011-12-23T09:03:35+00:00 app[web.1]: play.exceptions.JavaExecutionException: org.hibernate.exception.SQLGrammarException: could not load an entity: [models.UserAccount#2]
2011-12-23T09:03:35+00:00 app[web.1]: PersistenceException occured : org.hibernate.exception.SQLGrammarException: could not load an entity: [models.UserAccount#2]
...
2011-12-23T09:03:35+00:00 app[web.1]: Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not load an entity: [models.UserAccount#2]
2011-12-23T09:03:35+00:00 app[web.1]: Caused by: org.hibernate.exception.SQLGrammarException: could not load an entity: [models.UserAccount#2]
2011-12-23T09:03:35+00:00 app[web.1]: Caused by: org.postgresql.util.PSQLException: ERROR: column useraccoun0_.isadmin does not exist
...
我一直在寻找如何进行数据库升级,Play网站说Hibernate应该为我处理这个问题。
以下是我的数据库属性:
%prod.db=${DATABASE_URL}
%prod.jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
%prod.jpa.ddl=update
我做错了什么?谢谢你的帮助。
答案 0 :(得分:7)
在Prod模式下,属性 jpa.ddl 应为 none 。更新在生产中是有风险的,因为它可能会破坏数据库(因为它似乎正在发生在你身上!
管理此问题的正确方法是:
这应该有用。
答案 1 :(得分:6)
您需要在Heroku上运行Play数据库演变:
heroku run "play evolutions:apply --%prod"
答案 2 :(得分:1)
请注意,heroku的说明包含你的.gitignore中的db,所以如果你使用它:
heroku run“play evolutions:apply - %prod”
您将收到错误/警告。然而,令我惊讶的是(并且高兴)重新启动该过程确实应用了我的演变并更新了我的数据库(使用下面提到的heroku SQL控制台验证:-))。有点神秘,这是如何工作的,但它确实很开心!