由于SQL中的语法错误,Spring Boot 2测试存储库失败

问题描述 投票:0回答:1

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

我知道您可以讨论为什么要测试这个存储库,并且最好进行集成测试,但我希望能够为存储库创建一个测试用例,希望有人可以提供帮助。

java spring spring-boot spring-data-jpa
1个回答
1
投票

你能尝试在实体中使用GenerationType.IDENTITY而不是GenerationType.AUTO吗?

© www.soinside.com 2019 - 2024. All rights reserved.