猿问

旧实体版本的 Spring Boot 参考

我对 Spring Boot 有疑问。我在资源文件夹和一个实体中有一个 Schema.sql。在第一次运行应用程序时,一切都按预期工作。但是当我更改 schema.sql 中的列名、更新我的实体、删除数据库表并重新运行应用程序时,Spring 始终创建旧的实体列名。


在我的 application.properties 中,我有以下条目:


spring.datasource.name                   = mydatasource

spring.datasource.url               = jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC&createDatabaseIfNotExist=true

spring.datasource.driver-class-name      = com.mysql.cj.jdbc.Driver

spring.datasource.password               = password

spring.datasource.username               = username


spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

spring.jpa.show-sql=false

spring.jpa.hibernate.ddl-auto=update


security.oauth2.client.clientId= my_client

security.oauth2.resource.id= myid

security.oauth2.client.clientSecret= my_srcret

security.oauth2.client.accessTokenUri= http://localhost:8080/api/oauth/token

security.oauth2.client.userAuthorizationUri= http://localhost:8080/api/oauth/authorize

security.oauth2.resource.token-info-uri=http://localhost:8080/api/oauth/check_token


logging.level.org.springframework.web=DEBUG

我的新实体:


@Entity

@Table(name = "organizers")

public class Organizer implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "id")

    private Long id;

    @Column(name = "commercialName")

    private String commercialName;

    @Column(name = "org_description")

    private String description;

    @Column(name = "verified")

    private boolean verified;

    @Column(name = "isOnline")

    private boolean isOnline;

    @Column(name = "org_type")

    private OrganizerType type;

    @Column(name = "alias")

    private String alias;

    @Column(name = "fone")

    private String fone;

    @OneToOne(fetch = FetchType.EAGER)

    @JoinColumn(name = "userId")

    private User user;

}



蝴蝶刀刀
浏览 135回答 2
2回答

守候你守候我

它没有引用旧的实体版本,它只是看起来像那样。在应用程序属性中设置 spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy。默认情况下,spring 使用 org.springframework.boot.orm.jpa.SpringNamingStrategy。这会将 commercialName(驼峰式)之类的任何内容转换为 commerical_name。设置上述属性将覆盖此行为。

万千封印

spring.jpa.hibernate.ddl-auto=update设置为update以便休眠更新您的模式,它应该被完全删除,以便 flyway 可以从创建模式schema.sql。此外,您需要添加以下配置以启用从 flyway 创建模式:spring.datasource.initialization-mode=always从文档数据库初始化在基于 JPA 的应用程序中,您可以选择让 Hibernate 创建架构或使用 schema.sql,但您不能同时执行这两项操作。如果您使用 schema.sql,请确保禁用 spring.jpa.hibernate.ddl-auto。此外,您的实体映射存在错误。新实体引用该列@Column(name = "org_description"),但在您的新模式定义中,该列被称为 just description,一旦您的模式创建工作,您需要更新您的列映射。
随时随地看视频慕课网APP

相关分类

Java
我要回答