`
wsc830719
  • 浏览: 163637 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

这样封装JPA的EntityManager如何

阅读更多
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author Administrator
 */
public class EntityManagerUtil {

    private static final EntityManagerFactory emf;
    private static final ThreadLocal<EntityManager> threadLocal;

    static {
        emf = Persistence.createEntityManagerFactory("chykj1.4PU");
        threadLocal = new ThreadLocal<EntityManager>();
    }

    public static EntityManager getEntityManager() {
        EntityManager em = threadLocal.get();
        if (em == null || !em.isOpen()) {
            em = emf.createEntityManager();
            threadLocal.set(em);
        }
        System.out.println(em);
        return em;
    }

    public static void closeEntityManager() {
        EntityManager em = threadLocal.get();
        threadLocal.set(null);
        if (em != null) {
            em.close();
        }
    }

    public static void closeFactory() {
        if (emf != null && emf.isOpen()) {
            System.out.println("emf closed!");
            emf.close();
        }
    }

    public static void begin() {
        getEntityManager().getTransaction().begin();
    }

    public static void commit() {
        getEntityManager().getTransaction().commit();
    }

    public static void rollback() {
        getEntityManager().getTransaction().rollback();
    }

    public static <T> T find(Class<T> c, Object key) {
        return getEntityManager().find(c, key);
    }

    public static void persist(Object entity) {
        getEntityManager().persist(entity);
    }

    public static <T> T merge(T entity) {
        return getEntityManager().merge(entity);
    }

    public static void remove(Object entity) {
        getEntityManager().remove(entity);
    }

    public static void flush() {
        getEntityManager().flush();
    }
}

 08年底接触下了jsf,看了点ICEFaces,一个jpa的例子里有对EntityManager的封装,自己改了改用在一个办公室OA里了,发表出来,不知道这样做好不好,如果不发出来,也不知道好不好呢!发出来大家可以讨论下。另外我还上传了我写的OA的全部代码,感兴趣的朋友可以点评下。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics