Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过使用auto ddl=update更改JPA中的实体来更改表_Java_Hibernate_Spring Data Jpa - Fatal编程技术网

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
  • pe\u userinfo
    中修复您的列,自动ddl将创建该列,但将为空
  • 使用类似的jpa逻辑从
    pe\u userinfo\u temp
    ->new
    pe\u userinfo
  • 最后从源代码中删除
    pe\u userinfo\u temp
    ,并从数据源中删除

什么是“自动dll”?JPA没有这样的财产。它有一些属性
javax.persistence.schema generation.*
。一般来说,JPA提供程序不是处理架构升级的最合适工具。。。最好使用Liquibase/Flyway,因为当有JPA标准时,使用Hibernate特定的东西是没有意义的equivalents@BillyFrost
spring.jpa.hibernate.ddl auto
它在jpa中运行良好,访问它们完全没有问题。不。它不是JPA标准属性。它是HIBERNATE特有的属性。线索就在它的名字里。但它会删除表并删除我希望保存的所有记录@陈杨华 我知道,Hibernate没有其他方法可悲的是,您可以访问数据源并手动编辑列。我想找到一种方法来解决这个问题,比如通过Django在Python中进行迁移