ファイルの長いリストをmysqlに追加し、GrailsでSpringACLサービスを使用してアクセス許可を添付しようとしています。だから、私のコントローラーには:
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
}
ランダムに、次のデッドロック(オプトミスティック?)エラーが発生します:
ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションを再開してみてください。スタックトレースは次のとおりです。com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:ロックを取得しようとしたときにデッドロックが見つかりました。com.mysql.jdbc.Util.handleNewInstance(Util.java:406)at com.mysql.jdbc.Util.getInstance(Util.java:381)at com.mysql.jdbc.SQLError.createSQLException(SQLError。 java:1045)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO .java:3490)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)at com.mysql.jdbc.ConnectionImpl.execSQL( ConnectionImpl.java:2648)(com.mysql.jdbc.PreparedStatement)。
何か助けてください?