java - Spring Boot 2 测试存储库因 SQL 语法错误而失败

标签 java spring spring-boot spring-data-jpa

我正在使用 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/

相关文章:

java - 如何忽略 GET 请求的 @OneToMany 关系?

mysql - 如何将一副牌与数据库中存储的牌进行比较

java - 简单的 CDI 注入(inject)出现问题...在 SessionScoped Controller bean 中使用 @Inject 时出现 "Passivation"相关错误

java - 是因为 java 语言规则还是因为 jvm,添加 byte 转换为 int?

java - 如何验证 spring-mvc POST webservice 中的集合?

java - 从导入的 jar 中加载 MessageSouce 中的消息文件

spring-boot - Apache Camel Spring Boot - 处理路由后应用程序的正常关闭

java - 即使主项目有语法错误,也可以在 android studio 中独立测试简单的 java 代码

java - 检查建议是否得到应用

spring基础mvc示例应用,注解扫描混淆