java entitymanager类,JAVA:多线程环境中的EntityManager对象

if I have multiple threads, each use injector to get the EntityManager object, each use the em object to select a list of other class objects. Ready to be used in a for loop.

If a thread finishes first and calls clear(), will that affect the other threads? Like the for loop will have exception?

How about close()?

If the answer is "It depends", what (class definition? method call?) and where (java code? annotation? xml?) should I look at to find out how is it depended?

I did not write the source, I am just using someone else's library without documentation.

Thank you.

解决方案

Here is full working thread-safe Entity Manager Helper.

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

public class EntityManagerHelper {

private static final EntityManagerFactory emf;

private static final ThreadLocal threadLocal;

static {

emf = Persistence.createEntityManagerFactory("Persistent_Name");

threadLocal = new ThreadLocal();

}

public static EntityManager getEntityManager() {

EntityManager em = threadLocal.get();

if (em == null) {

em = emf.createEntityManager();

// set your flush mode here

threadLocal.set(em);

}

return em;

}

public static void closeEntityManager() {

EntityManager em = threadLocal.get();

if (em != null) {

em.close();

threadLocal.set(null);

}

}

public static void closeEntityManagerFactory() {

emf.close();

}

public static void beginTransaction() {

getEntityManager().getTransaction().begin();

}

public static void rollback() {

getEntityManager().getTransaction().rollback();

}

public static void commit() {

getEntityManager().getTransaction().commit();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值