2012-04-28 48 views
1

这不是一个真正的问题,但它在我的开发过程中有时是一件烦人的事情。比方说,我有一些实体(db是根据这些实体创建的,而不是其他实体),我决定添加一个列,删除一列或其他东西,现在我需要将这些更改提交给我的数据库。数据库设计更改JPA

这样做的最好方法是什么?我有时不得不重新启动Glassfish;有时部署它就足够了;有时我需要手动清除表,因为重新启动不会有帮助。我在persistence.xml的策略设置为Create,但其他选项并没有真正帮助我。

是否有任何标准方法提交从实体到数据库的更改?

回答

1

从我所知道的JPA中没有标准的方法来在开发过程中自动更改表,并仍然保留表中的数据。对于某些情况,切换到CREATE-DROP将执行这个技巧 - 但是这样你就会丢失表中的数据,并且很快需要编写脚本来填充表。正如你所说,这对你来说不是一个大问题,从CREATE-DROP到一个适用于多人项目的方法可能是一个好习惯。我/我们的方式是在repo中有一个sql脚本文件,当我修改我的实体时,我(手动)修改该脚本或添加一个新脚本(如果该表已在生产中或表中的数据是或者多于几行插入或通过使用创建并且不容易再现)。这样我们可以不断合并和运行代码。其他需要运行当前开发分支的项目成员针对表(表)过期的(本地?)数据库只需执行sql脚本。

+0

是的,这就是我所做的,我不介意丢失数据(分别记住,但我知道我无法避免它)。但是我的问题的一点是,有时需要花费很多时间才能更改数据库,并且我不知道如何加快此过程(如果我真的需要重新启动服务器或部署足够,等等) – 2012-04-28 18:40:49

+0

声音像IDE或建筑物+然后部署特定情况。如果通过asadmin重新部署应用程序(ear-file),CREATE-DROP应该正确执行并且不需要重新启动glassfish。如果你通过maven-script或netbeans/eclipse /部署,不管有什么配置问题,甚至是一般的cache/tmp-dir都会出现问题。 – esej 2012-04-28 20:02:26