我正在尝试将一长串文件添加到mysql中,并使用带有grails的spring ACL服务来附加权限。
因此,在我的 Controller 中,我有:
Files.withTransaction {
Files file = new Files(dataStore:ds,created:new Date(),path:target,name:fileName,contentType:contentType,contentLength:contentLength,isFolder:false).save(flush:true)
file = Files.lock(file.id)
filesService.addPermission(file, username ,BasePermission.ADMINISTRATION)
}
我对Files域对象没有任何担心,它支持大量数据,(特别是因为我在mysql中禁用了版本控制),问题出在使用aclUtilService的filesService上,
@Transactional
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_USER') or hasRole('ROLE_GROUP_OWNER')")
def addPermission(Files f, String username,Permission permission) {
aclUtilService.addPermission f,username,permission
}
随机我有以下死锁(乐观?)错误:
有什么帮助吗?
最佳答案
只需将事务封装在 Controller 中,并在服务中使用@Transactional即可解决问题:
Files.withTransaction {
Files file = new Files(
...
if (file.validate()) {
file.save()
filesService.addPermission(file,username,BasePermission.ADMINISTRATION)
...}
}