Java 如何通过使用auto ddl=update更改JPA中的实体来更改表
我将实体Java 如何通过使用auto ddl=update更改JPA中的实体来更改表,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,我将实体UserInfoEntity,变量名从“moblie”更改为“mobile”,然后重新启动了服务器。当我查看该表时,我发现该表没有删除“moblie”列。这是我的实体变化 由此 @Entity @Table(name = "pe_userinfo") public class UserInfoEntity { private String moblie; } 对此, @Entity @Table(name = "pe_userinfo") public class UserIn
UserInfoEntity
,变量名从“moblie”更改为“mobile”,然后重新启动了服务器。当我查看该表时,我发现该表没有删除“moblie”列。这是我的实体变化
由此
@Entity
@Table(name = "pe_userinfo")
public class UserInfoEntity {
private String moblie;
}
对此,
@Entity
@Table(name = "pe_userinfo")
public class UserInfoEntity {
private String mobile;
}
我假设您正在使用hibernate(甚至可能在SpringDataJPA中),实际上它不会重命名表,而是创建新表。此外,您不应该在任何不太严重的环境中使用(hibernate)自动更新
使用或。使用
auto-ddl=create-drop
要完全删除错误的架构并使用固定的列值重新创建它,您不能以这种方式更新架构
另外,正如它所说的,最好自己手动处理这种情况,而不是使用Hibernate在现有模式上处理这种修改
额外想法
如果您希望保存数据
- 您可以创建一个单独的表来保存数据
pe\u userinfo\u temp
- 部署您的产品时,自动ddl将创建
pe\u userinfo\u temp
- 使用jpa逻辑从
->pe\u userinfo
pe\u userinfo-temp
- 从数据源手动删除表
pe_userinfo
- 在
中修复您的列,自动ddl将创建该列,但将为空pe\u userinfo
- 使用类似的jpa逻辑从
->newpe\u userinfo\u temp
pe\u userinfo
- 最后从源代码中删除
,并从数据源中删除pe\u userinfo\u temp
javax.persistence.schema generation.*
。一般来说,JPA提供程序不是处理架构升级的最合适工具。。。最好使用Liquibase/Flyway,因为当有JPA标准时,使用Hibernate特定的东西是没有意义的equivalents@BillyFrostspring.jpa.hibernate.ddl auto
它在jpa中运行良好,访问它们完全没有问题。不。它不是JPA标准属性。它是HIBERNATE特有的属性。线索就在它的名字里。但它会删除表并删除我希望保存的所有记录@陈杨华 我知道,Hibernate没有其他方法可悲的是,您可以访问数据源并手动编辑列。我想找到一种方法来解决这个问题,比如通过Django在Python中进行迁移