con*_*ile 3 grails spring-mvc grails-orm grails-domain-class grails-2.0
我需要在一个事务中保存和更新不同域类的属性.
我知道我可以使用以下内容:
def addToChildren(String name, int age) {
User.withTransaction {
def user = new User(name)
user.age = age
user.save()
def school = new School()
school.addToUsers(user)
school.save()
}
}
Run Code Online (Sandbox Code Playgroud)
Sér*_*els 10
Grails服务已经是事务性的,它是操作域类的最佳位置.该文件解释它:
服务通常涉及域类之间的协调逻辑,因此通常涉及跨越大型操作的持久性.鉴于服务的性质,它们经常需要交易行为.您可以使用带有withTransaction方法的编程事务,但这是重复的,并不能充分利用Spring底层事务抽象的强大功能.
所以没有必要在withTransaction里面使用它们.
编辑
我应该在哪里放置addToChildren函数?
这更像是一个设计决策,您可以在域类或服务中声明方法.就个人而言,当我操纵多个域类我倾向于做一个服务类,除非我需要使用GORM事件:beforeInsert(),beforeUpdate()和beforeDelete().
我可以在模型功能中进行交易吗?
是的,您可以在域类中使用事务/休眠会话.一个常见的例子是beforeDelete事件:
class Person {
String name
def beforeDelete() {
ActivityTrace.withNewSession {
new ActivityTrace(eventName: "Person Deleted", data: name).save()
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于您要删除记录,因此需要一个新的hibernate会话来处理其他插入.
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |