low level programmer

« 好文推薦 - My Ideas for... | Main | JAI - BandCombine 處理 »
星期四 八月 21, 2008

測試用的 GeneralEAO, EntityManagerHelper

雖然不知道這樣算不算 GeneralEAO, 不過這兩個 class 已經寫好幾次拿來做測試了, 很方便用.
到後來乾脆直接摳來摳去, 反正要測試的時候就可以用, 看習慣.
因為很方便, 所以記一下, 不用以後又重寫. 順便如果有不足的再改.

首先是 ThreadLocal 的 EntityManagerHelper

public class EntityManagerHelper {

    private static final ThreadLocal<EntityManager> threadLocal = new ThreadLocal<EntityManager>();
    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
    
    public static EntityManager getEntityManager() {
        EntityManager em = threadLocal.get();
        if ( em == null ) {
            em = emf.createEntityManager();
            threadLocal.set(em);
        }
        return em;
    }
    
}
然後是 GeneralEAO, 這裡 transactionCommit 另外放是因為可以做很多事情之後再一次進 DB.
隨自己高興的結果.
public class GeneralEAO {

    public static <T> void create(T t) {
        EntityManagerHelper.getEntityManager().persist(t);
    }
    
    public static <T> T find(Class<? extends T> cls, Object key) {
        return (T) EntityManagerHelper.getEntityManager().find(cls, key);
    }
    
    public static <T> void update(T t) {
        EntityManagerHelper.getEntityManager().merge(t);
    }
    
    public static <T> void update(Query q) {
        EntityManager em = EntityManagerHelper.getEntityManager();
        em.getTransaction().begin();
        q.executeUpdate();
        em.getTransaction().commit();
    }

    public static <T> void delete(T t) {
        EntityManager em = EntityManagerHelper.getEntityManager();
        em.remove( em.merge(t) );
    }
    
    public static <T> T undo(T t) {
        EntityManager em = EntityManagerHelper.getEntityManager();
        t = em.merge(t);
        em.refresh( t );
        return t;
    }
    
    public static Query namedQuery(String name) {
        return EntityManagerHelper.getEntityManager().createNamedQuery(name);
    }
    
    public static Query query(String queryString) {
        return EntityManagerHelper.getEntityManager().createQuery(queryString);
    }
    
    public static void detachAll() {
        EntityManagerHelper.getEntityManager().clear();
    }
    
    public static <T> void transactionCommit() {
        EntityManager em = EntityManagerHelper.getEntityManager();
        em.getTransaction().begin();
        em.getTransaction().commit();
    }
    
}

迴響:

發表迴響:
  • HTML 語法: 關閉