我对 Spring Boot 有疑问。我在资源文件夹和一个实体中有一个 Schema.sql。在第一次运行应用程序时,一切都按预期工作。但是当我更改 schema.sql 中的列名、更新我的实体、删除数据库表并重新运行应用程序时,Spring 始终创建旧的实体列名。在我的 application.properties 中,我有以下条目:spring.datasource.name = mydatasourcespring.datasource.url = jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC&createDatabaseIfNotExist=truespring.datasource.driver-class-name = com.mysql.cj.jdbc.Driverspring.datasource.password = passwordspring.datasource.username = usernamespring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialectspring.jpa.show-sql=falsespring.jpa.hibernate.ddl-auto=updatesecurity.oauth2.client.clientId= my_clientsecurity.oauth2.resource.id= myidsecurity.oauth2.client.clientSecret= my_srcretsecurity.oauth2.client.accessTokenUri= http://localhost:8080/api/oauth/tokensecurity.oauth2.client.userAuthorizationUri= http://localhost:8080/api/oauth/authorizesecurity.oauth2.resource.token-info-uri=http://localhost:8080/api/oauth/check_tokenlogging.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;}
2 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
它没有引用旧的实体版本,它只是看起来像那样。在应用程序属性中设置 spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy。
默认情况下,spring 使用 org.springframework.boot.orm.jpa.SpringNamingStrategy。这会将 commercialName(驼峰式)之类的任何内容转换为 commerical_name。设置上述属性将覆盖此行为。
万千封印
TA贡献1891条经验 获得超3个赞
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
,一旦您的模式创建工作,您需要更新您的列映射。
添加回答
举报
0/150
提交
取消