2011-10-29 37 views
1

我正在开始使用JPA(eclipselink)开发的第一步,并且我想知道是否有任何好的做法可以帮助反映实体进入数据库的变更,创建整个数据库。 jpa eclipselink修改字段类型

在我的情况下,我有超过30个实体,其中一些是“正确”定义的,并且已经在数据库中保存数据行,但我发现我在定义一些时出错其他实体通过使用int类型作为主键而不是long,最糟糕的是这些实体中的一些被其他实体映射,这意味着它们被用作外键...所以我想知道是否有任何“适当”的方式来处理这个问题,而不必重新创建整个数据库。重新创建数据库将迫使我重新填满已经填满的表格和腰部的行数很多时间。

由于提前
乔治

+0

换句话说 - 您想要将实体的主键从'int'更改为'long'并且与实际数据库保持一致? –

回答

2

整数和渴望被映射到数据库中的数列。更改实体中的类型不会改变任何内容。您可能必须更改数据库中列的精度,以便该数字足够大以接受任何长整型值,但使用alter语句在SQL中执行此操作并不重要。

JPA只是一种访问数据库的方式。数据库不应该由JPA引擎创建。你可以这样做,但你并不是被迫这么做的。你可以用你的数据库做你想做的事情,然后用你的Java代码做你想做的事情。如果它们在运行应用程序时都映射到一起,它将起作用。

+0

使用sql更改数据库是我的第一个反思,但由于数据库是基于实体自动创建的,因此我认为自动修改数据库也是可能的,但如果我正确理解了您的意思,则不是这样。我想我会为此使用sql。感谢您的帮助 –

+1

“数据库不应该由JPA引擎创建。” - 是的,没有理由这么说。 –

+1

@Andrei:你曾经参与企业级JPA项目吗?你有没有告诉DBA他必须使用JPA创建数据库?您是否删除数据库及其包含的千兆字节数据,并且每次在设计中进行一些更改时都要重新创建它? –

0

你可以通过这样的配置的EclipseLink自动更新您的当前架构,以反映你在矿井模块做了修改:

<property name="eclipselink.ddl-generation" value="create-tables" /> 

对于重大修改你的模型并不能保证适当的更新模式,但对于较小的应该可以正常工作。

+0

这是我创建我的表,重新使用它不会做任何事情,它会一直告诉表已经存在,除非我创建了一些新的实体。使用“drop-and-create-tables”不会解决问题,因为它会重新创建所有内容并删除我插入的所有数据... –