Micronaut + GORM 不深度保存域
Micronaut + GORM does not save domain deeply
正在尝试更新执行域,仅更新来自 table 执行的值
import grails.gorm.annotation.Entity
@Entity
class Execution {
RatingItem price
Boolean isDone
}
@Entity
class RatingItem {
Boolean isDone
}
保存在控制器调用的事务和单例服务中
@Transactional
@Singleton
class ExecutionService{
boolean saveExecution(Execution execution){
if( execution.save(flush:true, failOnError:true) ){
return true
}
return false
}
}
正在调试..
execution.isDone 已更新
execution.price.isDone 不是
交易结束后 is_done rating_item 未更新
这种情况经常发生。有类似的代码有效。有些情况下我使用DataSource强制更新,但是这次我需要使用GORM
正如我之前提到的,有类似的代码可以工作。所以我注意到在这段代码中我使用了以下内容:
Execution execution = Execution.findById(id)
并且在当前问题中:
Execution execution = Execution.get(id)
当我使用 findBy 时它起作用了。
我认为这是因为 get 没有正确获取域,即使所有内部域都是惰性的:false。我相信这不会发生在 grails 中,而只会发生在 micronaut 中。
正在尝试更新执行域,仅更新来自 table 执行的值
import grails.gorm.annotation.Entity
@Entity
class Execution {
RatingItem price
Boolean isDone
}
@Entity
class RatingItem {
Boolean isDone
}
保存在控制器调用的事务和单例服务中
@Transactional
@Singleton
class ExecutionService{
boolean saveExecution(Execution execution){
if( execution.save(flush:true, failOnError:true) ){
return true
}
return false
}
}
正在调试.. execution.isDone 已更新 execution.price.isDone 不是
交易结束后 is_done rating_item 未更新
这种情况经常发生。有类似的代码有效。有些情况下我使用DataSource强制更新,但是这次我需要使用GORM
正如我之前提到的,有类似的代码可以工作。所以我注意到在这段代码中我使用了以下内容:
Execution execution = Execution.findById(id)
并且在当前问题中:
Execution execution = Execution.get(id)
当我使用 findBy 时它起作用了。
我认为这是因为 get 没有正确获取域,即使所有内部域都是惰性的:false。我相信这不会发生在 grails 中,而只会发生在 micronaut 中。