我试图更新数据库上的一行,并注意到一旦更新了该行,getAll就会停止正常工作。所有已更新的记录开始从getAll的结果中丢失。
例如,假设您有一个产品列表[product1,product2,product3]。如果我做类似product2.someProperty = 2的操作,然后再执行product2.merge(),则列表中将缺少第二个产品。因此,Products.getAll()的结果将为[product1,product3]。
(很抱歉,如果这是一个菜鸟问题)
如果我执行Product.get(idOfUpdatedProduct),它将正常工作。
我已经检查了数据库,并且合并正确地更新了数据。
问题似乎出在GetAll()方法上。
findAll()呈现相同的行为。
我的代码:
---action
def update() {
Product product = productService.detail(params.id?.toLong())
bindData(product, params)
productService.updateProduct(product)
redirect action: "show", params: [id: params.id]
}
---service
void updateProduct(product) {
product.validate()
StringBuilder str = new StringBuilder()
product.errors.allErrors.each { str << "${it}" }
if (!str.toString().isEmpty()) throw new Exception("Error: ${str.toString()}")
product.merge(flush: true, failOnError: true)
}
最佳答案
我发现了问题。
结果实际上是被返回的,但是由于某种原因,它被放置在列表的中间。
我通过对列表进行排序解决了。
关于select - 合并后DomainClass.getAll()无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208900/