jpa eclipselink修改字段类型

jpa eclipselink修改字段类型,jpa,eclipselink,Jpa,Eclipselink,我正在进行JPA(eclipselink)开发的第一步,我想知道是否有什么好的实践可以帮助将实体的更改反映到数据库中,而不必重新创建整个数据库。 在我的例子中,我有30多个实体,其中一些是“正确”定义的,并且已经在数据库中保存了数据行,但是我发现我在定义一些其他实体时犯了一个错误,使用int类型作为主键而不是long,最糟糕的是这些实体中的一些被其他实体映射,这意味着它们被用作外键。。。因此,我想知道是否有任何“适当”的方法来处理这个问题,而不必重新创建整个数据库。重新创建数据库将迫使我重新

我正在进行JPA(eclipselink)开发的第一步,我想知道是否有什么好的实践可以帮助将实体的更改反映到数据库中,而不必重新创建整个数据库。

在我的例子中,我有30多个实体,其中一些是“正确”定义的,并且已经在数据库中保存了数据行,但是我发现我在定义一些其他实体时犯了一个错误,使用int类型作为主键而不是long,最糟糕的是这些实体中的一些被其他实体映射,这意味着它们被用作外键。。。因此,我想知道是否有任何“适当”的方法来处理这个问题,而不必重新创建整个数据库。重新创建数据库将迫使我重新填充已经填充的表的行,并花费大量时间。

提前感谢

George

整数和长整数被映射到数据库中的数字列。更改实体中的类型不会更改任何内容。您可能必须更改数据库中列的精度,以便该数字足够大,可以接受任何长值,但在SQL中,使用alter语句这样做很简单


JPA只是访问数据库的一种方式。数据库不应该由JPA引擎创建。你可以这么做,但你不是被迫这么做的。您可以使用SQL对数据库执行任何操作,也可以使用Java代码执行任何操作。如果在运行应用程序时两者都映射在一起,则会起作用。

您可以通过如下配置EclipseLink,自动更新当前架构以反映您在模块中所做的修改:

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


对于模型的主要修改,它不能保证模式的正确更新,但对于较小的修改,它应该可以正常工作

换言之,您希望将实体的主键从“int”更改为“long”,并与实际数据库保持一致?使用sql更改数据库是我的第一个反映,但由于数据库是基于实体自动创建的,因此我认为自动修改它也是可能的,如果我没有正确理解你。。。所以我想我将使用sql来实现这一点。感谢您的帮助“数据库不应该由JPA引擎创建。”-是的,没有理由这么说。@Andrei:您是否参与过企业级JPA项目?您是否曾经告诉过DBA他必须使用JPA来创建数据库?您是否会在每次对设计进行更改时删除数据库及其包含的千兆字节数据并重新创建它?“您是否曾告诉DBA必须使用JPA创建数据库?”-这是否意味着使用JPA创建数据库不是“推荐”?如果是这样的话,为什么呢?这不是适合这份工作的工具。使用它来生成创建表、外键、约束和索引所需的SQL可能是可以接受的,但是要创建数据库本身,不可以。这只适用于快速原型和测试。您需要为实际数据库设置表空间、用户权限等。正如您刚才所注意到的,您经常需要从已经包含数据的旧模式开始。这是我创建表时所做的,重新使用它不会做任何事情,它会一直告诉您表已经存在,除非我创建一些新实体。使用“拖放并创建表”也不能解决问题,因为它会重新创建所有内容并删除我插入的所有数据。。。