我试图更新数据库上的一行,并注意到一旦该行被更新,getAll就停止正常工作。所有更新的记录都开始从getAll的结果中丢失。
例如,假设您有一个产品列表 [product1, product2, product3]。 如果我做类似 product2.someProperty = 2 后跟 product2.merge() 的事情,产品 2 将开始从列表中丢失。因此,Products.getAll() 的结果将是 [product1, product3]。
(对不起,如果这是一个菜鸟问题)
如果我执行 Product.get(idOfUpdateProduct),它将起作用。 我已经检查了数据库,合并正在正确更新数据。 问题似乎出在 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)
}
我发现了问题。
结果实际上是返回的,但由于某种原因,它被放在了列表的中间。
我通过对列表进行排序解决了它。