Grails集成测试错误具有相同标识符值的不同对象已与会话关联

时间:2017-04-12 16:11:24

标签: hibernate grails gorm

我有以下集成测试:

@Integration
@Rollback

class IndustryDataServiceSpec extends Specification {

    @Shared
    Sector techSector
    Industry AI
    Industry HCI
    def industryDataService

    def setup() {

        techSector = new Sector(name: "Technology")
        techSector.save(flush: true)
        AI = new Industry(name: "Artificial Intelligence")
        HCI = new Industry(name: "HCI")
        techSector.addToIndustries(AI)
        techSector.addToIndustries(HCI)

    }

    def "attach the sector to the industry"() {

        when: "the industry is saved"

        def messageAI = industryDataService.insertIndustry(AI)
        def messageHCI = industryDataService.insertIndustry(HCI)

        then: "the industry should be saved and render the message"
        messageAI == AI.name + " has been saved"
        messageHCI == HCI.name + " has been saved"
    }

    def "get the industries which match the sector"() {
        given: "a sector name"
        String tech = "Technology"

        when: "get the industries"
        def industryList = industryDataService.getIndustriesToSector(tech)

        then: "only the industries which are within this sector should be returned"
        industryList.size == 2
    }

    def cleaup() {
        AI.delete(flush: true)
        HCI.delete(flush: true)
        techSector.delete(flush: true)
    }

}

industryDataService.insertIndustry如下:

def insertIndustry(Industry newIndustry) {

    def message
    if (newIndustry != null) {
        if (newIndustry.validate()) {
            newIndustry.save(flush: true)
            message = newIndustry.name + " has been saved"
        } else {
            message = newIndustry.name + " is not valid"
        }
    } else {

        message = "Insert a Industry"
    }

    return message
}

运行此测试时,我收到以下错误:

org.springframework.dao.DuplicateKeyException: A different object with the same identifier value was already associated with the session : 

集成测试正在H2测试数据库上运行,并且已包含Rollback注释以从数据库中删除已保存的实例。我不完全确定为什么我会收到此错误,因为数据库中应该没有任何内容。

0 个答案:

没有答案