注意:我在Spring启动存储库上打开了一个问题。这是链接
https://github.com/spring-projects/spring-boot/issues/9048
我正在尝试在我的实体中插入一些行,以便使用H2数据库在开发人员计算机上进行测试。我正在使用data.sql
。
它工作正常,创建实体然后运行data.sql
以在实体生成的表中插入数据。
但是我需要创建一些没有实体类的其他表,所以我正在使用schema.sql
。这是问题,只要我将schema.sql
添加到项目中,Spring Boot就会在创建实体之前运行data.sql
,并以Table not found
异常结束。
如何让
data.sql
使用schema.sql
和实体 同时上课?
以下是该项目的示例代码。
用于重现问题的功能性maven项目的Git链接。
https://github.com/ConsciousObserver/SpringBootSchemaSqlIssue.git
package com.test;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TestDataSqlApplication {
public static void main(String[] args) {
SpringApplication.run(TestDataSqlApplication.class, args);
}
}
@Entity
@Table(name="USER_DETAILS")
class UserDetails {
@Id
@GeneratedValue
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
schema.sql文件
create table test(id int(10), name varchar(10));
data.sql
insert into USER_DETAILS VALUES(1, 'user1');
insert into USER_DETAILS VALUES(2, 'user2');
insert into USER_DETAILS VALUES(3, 'user3');
修改 *
根据@abaghel
将data.sql
重命名为import.sql
的建议,但import.sql
无条件运行。那不是我需要的。
对于测试,我有一个maven配置文件可以激活特定的spring.datasource.platform = h2
,从而迫使spring加载schema-h2.sql
和data-h2.sql
。不幸的是,平台对import.sql
没有影响,因此将其重命名为import-h2.sql
会阻止Spring加载它。
这是平台更改的分支,以重现此问题。
https://github.com/ConsciousObserver/SpringBootSchemaSqlIssue/tree/platform-h2
答案 0 :(得分:1)
将data.sql
重命名为import.sql
,您的应用程序将启动而不会出现任何错误。请参阅here上的相关文档。
答案 1 :(得分:0)
我遇到了同样的问题。我的项目中有 data.sql
和 schema.sql
文件。我的解决方案是在 schema.sql
文件中添加表创建 DDL,由 data.sql
文件中的命令使用。