当我需要保存一个对象列表时,每个对象都应保存在它自己的事务中(这样,如果一个对象失败了,它们就不会全部失败),我可以这样做:
List<Book> books = createSomeBooks()
books.each { book ->
Book.withNewSession {
Book.withTransaction {TransactionStatus status ->
try {
book.save(failOnError: true)
} catch (ex) {
status.setRollbackOnly()
}
}
}
}
我Book.withNewSession
之所以使用,是因为如果一本书无法保存并且交易被回滚,则该会话将无效,这将阻止后续书籍的保存。但是,这种方法存在两个问题:
有没有更好的办法?我发生的一种可能性是依赖注入Hibernate,SessionFactory
然后执行此操作
List<Book> books = createSomeBooks()
books.each { book ->
try {
Book.withTransaction {
book.save(failOnError: true)
}
} catch (ex) {
// use the sessionFactory to create a new session, but how....?
}
}
应该这样做:
List<Book> books = createSomeBooks()
books.each { book ->
Book.withNewTransaction {TransactionStatus status ->
try {
book.save(failOnError: true)
} catch (ex) {
status.setRollbackOnly()
}
}
}
如果您回滚,该会话无效,它将被清除。因此,任何访问从数据库读取的实体的尝试都将失败,但是写尚未持久的实体就可以了。但是,您确实需要使用单独的事务来防止一个故障回滚所有事件,因此要避免withNewTransaction。
问题内容: 我有一个基于电子表格的自动报告,需要每天创建,其中包含一些图表,汇总功能(例如SUM和AVERAGE)和格式化的单元格(日期,百分比等)。 我试图将这些结果直接写到Excel文件中,但是Python的xlwt和xlrd不支持图表和函数。 此外,尝试打开现有的格式化Excel文件并更改某些单元格的值最终导致擦除了现有文件中的所有图表和功能。 是否可以将图表和功能写入OpenOffice电
我使用的是Visual Studio 2017,我安装了leanft。运行时引擎在我打开IDE时启动。第一个问题是如何使用c#以编程方式启动运行时引擎。 下一个问题围绕着这样一种情况:在运行时,当我执行代码将插件附加到chrome浏览器时,它有时会超时执行附加。我怎样才能处理得更好。基本上,我的测试会让chromdriver启动一个浏览器,然后它会尝试将leanft插件连接到正在运行的浏览器上。如
我正在使用 Log4j2。要求是,如果记录器无法写入日志文件(访问被拒绝、锁定等),则应用程序应关闭。 我编写了以下类来实现这一点: 我用下面的代码以编程方式构建我的文件记录器: 现在我的问题: 我知道在Log4j 1。X.X版本向日志程序添加一个错误处理程序是非常容易的。您可以简单地这样做: 如何在Log4j2版本2.13.3中使用上面的代码执行此操作?
问题内容: 如何以编程方式确定我的机器是x86,x64还是IA64? 问题答案: 在Windows系统上,您可以获得环境变量PROCESSOR_ARCHITECTURE。这是MSDN文章,解释了可以返回的值。
> 步骤: request=oauthClientRequest.AuthorizationProvider(OAuthProviderType.google)//AuthorizationProvider(OAuthProviderType.google).setState(OAuth.oauth_state).setResponseType(Oauth.oauth_code).setreDir