gorm-hibernate5
gorm-hibernate5 copied to clipboard
Entity.find with closure breaks in Spock then: block
When doing a query with a .find { }
method on a domain object (in this case in a Grails 4.0.11 application) the generated detached criteria does not contain the criteria defined in code.
Example:
def "test where query is in then block with def"() {
given:
Bundle bundle = new Bundle(name: 'bundle')
bundle.addToVersions(name: '1.0')
bundle.save(flush: true)
when:
bundle.addToVersions(name: '1.1')
bundle.save(flush: true)
then:
def result = BundleVersion.find({ name == '1.1' && bundle.name == 'bundle' })
result.name == '1.1'
}
where the result
is a variable, then it works. But if the variable is omitted like this:
def "test where query is in then block without def"() {
given:
Bundle bundle = new Bundle(name: 'bundle')
bundle.addToVersions(name: '1.0')
bundle.save(flush: true)
when:
bundle.addToVersions(name: '1.1')
bundle.save(flush: true)
then: "this will fail - which is not expected"
BundleVersion.find({ name == '1.1' && bundle.name == 'bundle' }).name == '1.1'
}
Then 1.0
is found which is unexpected.
An example of this behaviour can be found here: https://github.com/sbglasius/gorm-query-bug
Discovered by @thomas58