java - 由于 SQL 中的语法错误,Spring Boot 2 测试存储库失败
问题描述
我正在使用 spring-boot 最新的 2.1.3 版本并想从测试用例开始,但这对我来说不起作用。
我有一个简单的实体
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@Table(name = "foo.Account" )
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "uid")
private Long id;
@Column(name= "login")
private String username;
@Column(name = "password_hash")
private String password;
}
使用这个存储库
@Repository("UserRepository")
public interface UserRepository extends JpaRepository<UserEntity, Long> {
}
现在我想为这个存储库写一个测试
@RunWith(SpringRunner.class)
@DataJpaTest
@EnableJpaRepositories
@TestPropertySource(properties = {
"spring.jpa.hibernate.ddl-auto=create-drop"
})
public class UserRepositoryTest {
@Autowired
UserRepository repository;
@Test
public void insertTest(){
UserEntity ue = new UserEntity();
ue.setUsername("foo");
ue.setPassword("bar");
// ue.setRoles(new ArrayList<>());
repository.save(ue);
}
}
在我的测试资源中,我把这个 schema.sql
CREATE SCHEMA IF NOT EXISTS FOO
但是如果由于语法错误而失败,我不明白为什么会这样。由于 Annotation GenerationType.Auto 将创建 hibernate_sequence 表
2019-03-22 14:36:38.421 ERROR 9552 --- [ main] o.hibernate.id.enhanced.TableStructure : could not read a hi value
org.h2.jdbc.JdbcSQLException: Syntax Fehler in SQL Befehl "SELECT NEXT_VAL AS ID_VAL FROM foo.HIBERNATE_SEQUENCE WITH[*] (UPDLOCK, ROWLOCK) "
Syntax error in SQL statement "SELECT NEXT_VAL AS ID_VAL FROM foo.HIBERNATE_SEQUENCE WITH[*] (UPDLOCK, ROWLOCK) "; SQL statement:
select next_val as id_val from epls_dbo.hibernate_sequence with (updlock, rowlock) [42000-197]
我知道您可以讨论为什么要测试这个存储库,并且最好进行集成测试,但是我希望能够为存储库制作一个测试用例,希望有人可以提供帮助。
解决方案
您可以尝试在实体中使用GenerationType.IDENTITY
而不是GenerationType.AUTO
推荐阅读
- c++ - 使用 cblas_dgemm 计算伪逆的问题
- excel - 在 python 中将文件作为命令行参数的输入
- multithreading - JMeter:如何在特定范围内生成 2 个随机浮点数并进一步使用它
- sql-server - SSIS:将 XML 文件内容传递给存储过程
- javascript - 导入到 Electron JS 时站点不工作
- javascript - 获取作为对象的数组元素的索引
- wordpress - 防止从 Woocommerce 中的名字和姓氏生成用户名
- curl - cURL 在 Jenkins Pipeline 中没有采用第二个参数
- ios - 应用程序因信号 SIGSEGV 而崩溃
- ios - Xcode 10 命令行构建:存档失败,Fabric Info.plist 错误