- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个模型 Person
.我的域正在使用 GORM 触发器,例如:
def afterInsert() {
someService.someMethod(this.id)
}
def afterUpdate() {
someService.someMethod(this.id)
}
SomeService
然后看起来像这样:
def someMethod(id) {
// This query returns stale object
def person = Person.findById(id)
}
someMethod()
在
SomeService
被调用时,查询不会返回更新的对象。相反,它获取旧版本/数据。
afterUpdate()
被调用时,更改尚未持久化到数据库。我也试过
person.refresh()
,但显然它遇到了同样的问题。
.save(flush:true)
在保存对象的原始服务中,但它仍然在 gorm 触发器方法中返回旧数据。
Person
对象以使其获得最新的方式?
最佳答案
如果可能,请避免来自 gorm Hook 的数据库交互,因为当您的应用程序增长时您会遇到问题,并且您最终会调试很多 StaleObject 或 OptimisticLocking -异常或其他奇怪的行为,就像您现在看到的那样。
如果可能,最好在此处更改底层设计,例如,如果您需要其他逻辑,则让服务在此处作为实体持久性工作。也许你可以在这里使用一些事件驱动的机制,比如 activemq。
将服务注入(inject)到域类是违反设计的,出于性能原因,在 grails 3.x 中默认阻止。如果可能,应始终避免。如果您继续像这样将事件记录推到边缘,事件记录会给您带来问题。
关于Grails:是否可以从 afterInsert() 或 afterUpdate() 查询更新后的保存对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52265475/
我有一个这样的域类: class Domain { String a int b String c ... def afterInsert(){ def anot
我有一个正在运行的 grails 应用程序,我想在其中添加一些功能。 我想在一个对象被插入、更新或删除到数据库之后做。 我想到的是触发一个 JMS 事件“person.inserted”、“perso
我有一个域对象,它保存基于作为同一域对象属性的参数的计算结果。我想确保任何时候参数被用户更改,它都会重新计算并正确保存到数据库中。 我正在尝试使用 afterInsert(首先确保计算正确)和 aft
在 Apostrope CMS 中,我希望使用 apostrope-submit-widgets 提交一个片段 - 一切似乎都正常,除了我的 afterInsert 方法被调用了两次,因此发送了两次电
我遇到了这个奇怪的错误,无法在此问题的以前的答案中找到任何解决方案,我认为这与我的案件有关。 我在这样的域的afterInsert()方法中遇到此问题 Class Employee { /**
我有一个用户实体: @Entity() export class User extends BaseEntity { @PrimaryGeneratedColumn('uuid') id: s
假设我有一个模型 Person .我的域正在使用 GORM 触发器,例如: def afterInsert() { someService.someMethod(this.id) } def
简单地说,我有以下场景: class OwnedRights { static belongsTo = [comp: Competition] @Transactional d
我在后端编写了以下函数 => dataa.js 文件 let recived_msg_users = [] ; export function chat_afterInsert(item,
是否可以(至少)在 Objection ORM 的 $afterInsert Hook 中检索创建模型的 ID? async $afterInsert(queryContext) 我猜想并希望它能
我是一名优秀的程序员,十分优秀!