public void deleteUserById(Integer id){
TypedQuery<User> query = em.createQuery("from " + User.class.getName() + " user where user.id = :userid ", User.class);
query.setParameter("userid", id);
User user = query.getSingleResult();
em.remove(user);
}
@Transactional
public void deleteUserById(Integer id){
userDao.deleteUserById(id);
}
如dao里上段代码,如果service调用方法没有申明事务,user对象会被entity manager(jpa实现是hibernate)认为是detached的,抛异常。想问下不申明事务,代理对象(如果被代理了)是怎么处理的呢?
按我的理解,查询没有事务也是可以的,如果开启了默认事务,query和remove共用一个entity manager,既然查出来了应是托管状态吧。如果没有任何事务,remove不会去commit,就算是做状态检查,但是查询成功了,共用em,不至于是游离态呀,如果用aop了,不至于智能到去拆分deleteUserById方法,执行查询后,entitymanager执行clear操作。
问题补充:AngelAndAngel 写道
事务范围不代表session内缓存的entity生命周期。
恩,我要问的是把那个事务声明去掉后的行为是怎样的,也就是你说的entity在查询出来后为什么变成的detached了,如果加上事务声明就不是的了。
相关推荐
Hibernate持久化对象的生命周期 持久化对象的状态: 瞬时对象(Transient Objects)持久化对象(Persist Objects)、离线对象(Detached ...在Hibernate应用中Java对象的状态 Session的保存、更新、删除、查询方法:
Java 对象可以通过 Session 的 save() 方法把临时状态转换为持久化状态。 3. 游离状态(detached):特征是不再位于 Session 缓存中,游离对象由持久化状态转变而来,数据库中可能还有对应记录。Java 对象可以通过 ...
与.Net Fiddle中的Detached一起玩! 附加匿名对象图: 导入JSON图: 分离映射器 它是什么 嗨!我正在尝试构建一个快速的,面向对象的映射器,以简化将不连贯的实体保存在Web服务中的任务。 它受到 , 和其他很棒的...
73.2. 为什么要用Spring? 76 73.3. spring工作机制或工作原理 76 73.4. Spring是什么?根据你的理解详细谈谈你的见解。 76 73.5. 项目中如何体现Spring中的切面编程,具体说明。 77 73.6. 项目中用到的Spring中的切...
主要介绍了详解git submodule HEAD detached 的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
要安装,请在命令行中输入以下命令: npm install is-dom-detached输入ES模块: import isDetachedNode from 'is-dom-detached' ; CommonJS模块: const isDetachedNode = require ( 'is-dom-detached' ) ;用法...
Hibernate 实体状态 瞬态(transient) 持久化(persistent) 脱管(detached) 转换
根据注释可以知道 merge 有两个职责: 1.如果对象为 unsaved,对对象的拷贝执行 save ...2.如果对象为 detached,将对象的状态拷贝到和对象的标识一样的持久化对象中,如果持久化对象不存在,就执行 get 方法将其加载。
安装包: npm install --save jqueryui-detached-1.11用法这个想法是将这个模块与jquery-detached结合使用。 例如: var $ = require ( 'jquery-detached-2.1.4' ) . newJQuery ( ) ; var jqueryui = require ( '...
Detached(托管状态): 1.和Session失去关联 2.数据库中有对应记录存在 3.对托管对象的更动,在托管期间不会影响数据库,但是将托管状态重新和数据库进行关联的时候会将托管对象重新变为持久态,那么在托管期间发生...
独立的 无框架框架 入门 分离使事情尽可能简单。 只需抓住一些分离的工具: 由用♡
15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.1.1. 标量查询(Scalar queries) 16.1.2. 实体查询(Entity queries) 16.1.3....
15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.1.1. 标量查询(Scalar queries) 16.1.2. 实体查询(Entity queries) ...
15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.1.1. 标量查询(Scalar queries) 16.1.2. 实体查询(Entity queries) ...
离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.2. 别名和属性引用 16.3. 命名SQL查询 16.3.1. 使用return-property来明确地...
15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.1.1. 标量查询(Scalar queries) 16.1.2. 实体查询(Entity queries) 16.1.3....
离线(detached)查询和子查询 17. Native SQL查询 17.1. 创建一个基于SQL的Query 17.2. 别名和属性引用 17.3. 命名SQL查询 17.3.1. 使用return-property来明确地指定字段/别名 17.3.2. 使用存储过程来查询 ...
15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.1.1. 标量查询(Scalar queries) 16.1.2. 实体查询(Entity queries) ...
15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.1.1. 标量查询(Scalar queries) 16.1.2. 实体查询(Entity queries) ...
15.8. 离线(detached)查询和子查询 15.9. 根据自然标识查询(Queries by natural identifier) 16. Native SQL查询 16.1. 使用SQLQuery 16.1.1. 标量查询(Scalar queries) 16.1.2. 实体查询(Entity queries) ...