我试图建立一个小型的springboot应用程序,我想在其中使用flyway进行数据迁移,并使用hibernate在运行时处理实体。我正在使用Postgre SQL数据库。
我已经启动应用程序并使用flyway运行并创建了SQL表。如果数据库中没有数据,由springboot创建的存储库可以正常工作,但是如果我想创建数据或尝试从数据库(我直接插入)中接收数据,则会收到错误消息:
org.postgresql.util.PSQLException: ERROR: column event0_.category does not exist
Hint: Perhaps you meant to reference the column "event0_.category_id".
错误出现在包含外键的列中,sql表的定义为:
CREATE TABLE fin_categories (id BIGINT NOT NULL, name VARCHAR(255) NOT NULL, parent_category BIGINT, PRIMARY KEY (id));
CREATE TABLE fin_events (id BIGINT NOT NULL, name VARCHAR(255) NOT NULL, amount INTEGER, currency VARCHAR(10), category_id BIGINT, PRIMARY KEY (id), FOREIGN KEY(category_id) REFERENCES fin_categories (id));
实体(简化为相关实体)为:
@Entity
@Table(name = "fin_events")
public class Event implements Serializable {
private static final long serialVersionUID = 6768956341367037388L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@OneToOne(optional = true)
@JoinColumn(name = "category_id")
private Category category;
}
@Entity
@Table(name = "fin_categories")
public class Category implements Serializable {
private static final long serialVersionUID = 450309297916394998L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
}
我不确定应用程序属性文件是否相关,因此请确保:
spring.datasource.jdbcUrl=jdbc:postgresql://192.168.99.100:5432/finances
spring.datasource.username= admin
spring.datasource.password= bLCMXF7T6dxP2EFK
spring.datasource.initialization-mode= always
spring.datasource.database-platform = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
spring.jpa.hibernate.ddl-auto = validate
我已经需要很多时间,并且遇到许多不同的错误,但是我觉得这是我最接近关键问题的地方。
谢谢你们的帮助!