我正在使用 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
但是如果由于语法错误而失败,我不明白为什么会发生这种情况。由于注释 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
关于java - Spring Boot 2 测试存储库因 SQL 语法错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55301076/