基于Spring boot Hibernate JPA的DAOs的单元测试

基于Spring boot Hibernate JPA的DAOs的单元测试,spring,hibernate,unit-testing,jpa,spring-boot,Spring,Hibernate,Unit Testing,Jpa,Spring Boot,我正在尝试为使用Hibernate/JPA实体和DAO的基于Spring引导的应用程序编写单元测试。以下是我迄今为止遵循的步骤: 1) 在pom.xml中添加了以下内容 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>tes

我正在尝试为使用Hibernate/JPA实体和DAO的基于Spring引导的应用程序编写单元测试。以下是我迄今为止遵循的步骤:

1) 在pom.xml中添加了以下内容

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>runtime</scope>
</dependency>
3) 在../test/resources/import.sql中,我添加了一些数据创建脚本“插入…”

insert into groups(GROUP_NAME, THREAD_POOL_SIZE) values ("TEST GROUP 1", 5);
4) 单元测试如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)

public class TestGroupDao {

    @Autowired
    GroupDao groupDao;

    @Test
    public void testFindByName() {

        Group group = groupDao.findByName("TEST GROUP 1");
        //assertThat(group.getPoolSize(), is(equalTo(5)));
    }
}
运行此测试时,会收到错误消息,例如:

org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: Unsuccessful: alter table..
org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000389: user lacks privilege or object not found: PUBLIC.GROUP
5) 集团实体:

@Entity
@javax.persistence.Table(name = "groups", uniqueConstraints = {
        @UniqueConstraint(columnNames = "GROUP_NAME"),
})
public class Group {

    // ==============
    // PRIVATE FIELDS
    // ==============

    // An autogenerated id (unique for each group in the db)
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "GROUP_ID", unique = true, nullable = false)
    private long id;

    @Column(name = "GROUP_NAME", unique = true, nullable = false)
    private String name;

我遗漏了什么?

团队,我发现你最后的评论非常重要

Spring不允许使用带有ddl auto=create drop属性值的schema.sql(没有平台siffix)

这一部分如下所述:

如果要在JPA应用程序中使用schema.sql初始化(使用 Hibernate)则ddl auto=create drop在休眠时将导致错误 尝试创建相同的表。要避免这些错误,请设置ddl auto 明确指定为“(优选)或“无”。无论你是否使用 ddl auto=create drop您始终可以使用data.sql初始化新的 数据


发布组实体和应用程序配置的相关部分的映射。我尝试将import.sql重命名为data.sql并创建schema.sql以创建组表,但仍然收到此错误。不确定我更改了什么,但现在可以正常工作。我所做的唯一一件事是将所有必要的sql添加到import.sql。也许这就是原因。你有这些字段的setter和getter吗?
@Entity
@javax.persistence.Table(name = "groups", uniqueConstraints = {
        @UniqueConstraint(columnNames = "GROUP_NAME"),
})
public class Group {

    // ==============
    // PRIVATE FIELDS
    // ==============

    // An autogenerated id (unique for each group in the db)
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "GROUP_ID", unique = true, nullable = false)
    private long id;

    @Column(name = "GROUP_NAME", unique = true, nullable = false)
    private String name;