java – Hibernate会话线程安全
发布时间:2020-12-14 16:42:41 所属栏目:Java 来源:网络整理
导读:我知道会话不是线程安全的.我的第一个问题是:将实体传递给另一个线程是安全的,做一些工作,然后将其传回原来的线程并进行更新. public class Example1 { MyDao dao; ... public void doWork() { MyEntity entity = dao.getEntity(); Runnable job = new Job(
我知道会话不是线程安全的.我的第一个问题是:将实体传递给另一个线程是安全的,做一些工作,然后将其传回原来的线程并进行更新.
public class Example1 { MyDao dao; ... public void doWork() { MyEntity entity = dao.getEntity(); Runnable job = new Job(entity); Thread t = new Thread(job); t.run(); t.join(); dao.merge(entity); } } 我的第二个问题是:在一个线程中新建一个实体并将其保存在另一个线程中是否安全? public class Example2 { MyDao dao; ... public void doWork() { MyEntity entity = new Entity(); new Thread(new Job(dao,entity)).run(); } } public class Job implements Runnable { private MyDao dao; private MyEntity entity; ... @Override public void run() { dao.save(entity); } } 编辑我忘记提到这些实体是专门配置为急切加载 解决方法
>否.实体附加到会话,并包含与会话相关联的代理(为了延迟自身).这样做会使用多个线程的会话.由于会话不是线程安全的,这不是一个好主意. >虽然实体是暂时的(即刚创建新的),但它并没有附加到会话中,Hibernate不了解它,实体是一个简单的Java对象.所以没有问题,我没有你的DAO的所有细节.如果您的DAO的方法应该作为现有事务的一部分进行调用,则该方法将无法正常工作,因为事务与当前线程相关.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用Java在MongoDB中创建集合
- java – apache httpclient内容长度问题
- java – 为什么我们不能创建Collections类的实例(不是Colle
- 找到JAVA_HOME并将其设置在RHEL上
- java – Tomcat 7挂起初始化Spring根WebApplicationContext
- org.springframework.context.ApplicationContextException
- 如何在R中设置rJava的类路径?
- java – 是否有实际的推理来强制构建JDK版本?
- jpa独立定制类型映射/ javax.persistence.x替代org.hiberna
- 使用SDK开发手机(Java)还是不开发?