为什么@Transactional自动保存到数据库

Chidar

我有一个用@Transactional注释的方法。我从数据库中检索一个对象,更改一个字段,然后从该方法返回。不保存我的对象,无论如何都会更新数据库,这很奇怪。

您能告诉我如何避免这种行为吗?

被告

这种行为是交易性的主要目的之一。

在事务方法即将返回之前,事务将提交,这意味着对托管实体的所有更改都将刷新到数据库中。

如果发生错误,则事务将回滚,这意味着不会对数据库提交任何更改。

你可能会得到LazyInitializationException尝试从实体访问延迟加载的特性,可能是一个集合时。从数据库中获取实体时,不会实例化懒惰的属性。

如果您访问事务中的延迟加载属性,则持久性提供程序将创建一个查询,实例化结果并将其附加到“父”实体。

编辑:如果您希望加载惰性属性,并且能够在不将更改持久保存到数据库的情况下更改您的实体,则可以使用用于惰性属性的获取联接来获取实体。

em.createQuery("SELECT e FROM MyEntity e JOIN FETCH e.lazyProp");

然后继续使用@orid描述的方法之一。

如果不使用提取联接,则需要在事务内部访问延迟加载的属性:

myEntity.getLazyProp().size();

请注意对的调用size()仅仅调用getter是不够的,因为您将获得代理。您需要执行需要该属性中的实际数据的操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么@Transactional自动保存到数据库

来自分类Dev

为什么数据没有保存到数据库?

来自分类Dev

Slick:为什么将“ Unit”保存到数据库?

来自分类Dev

保存到数据库后自动更新viewModel

来自分类Dev

保存到数据库时,为什么“ created_at”时间错误?

来自分类Dev

为什么我在论坛中的评论未保存到数据库?

来自分类Dev

保存到数据库后,为什么CreateView中的self.object没有ID?

来自分类Dev

为什么我的Ruby应用程序不将实例保存到数据库?

来自分类Dev

Slick:为什么我将“ Unit”保存到我的数据库中?

来自分类Dev

为什么我在论坛中的评论未保存到数据库?

来自分类Dev

为什么使用自定义`create`方法时仍然将无效数据保存到数据库?

来自分类Dev

将数据保存到数据库

来自分类Dev

数据未保存到数据库

来自分类Dev

将数据保存到数据库

来自分类Dev

无法弄清楚为什么表单无法保存到Rails上的数据库ruby中

来自分类Dev

在Rails应用程序中创建按钮不起作用。为什么不保存到数据库?

来自分类Dev

MVC保存到数据库

来自分类Dev

CakePHP不会保存到数据库

来自分类Dev

Django:无法保存到数据库

来自分类Dev

Python保存到MySQL数据库

来自分类Dev

servlet无法保存到数据库

来自分类Dev

将实例保存到数据库

来自分类Dev

将列表保存到数据库

来自分类Dev

实体未保存到数据库

来自分类Dev

Ruby on Rails保存到数据库

来自分类Dev

从WinForm保存到数据库

来自分类Dev

FactoryGirl,是否保存到数据库?

来自分类Dev

将实例保存到数据库

来自分类Dev

保存到线程内的数据库