package com.example.redis.util;
import org.slf4j.event.Level;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
@Repository
public class EntityManagerHelper {
private static EntityManagerFactory emf;
private static final ThreadLocal<EntityManager> threadLocal = new ThreadLocal<EntityManager>();
@PersistenceUnit
public void setEntityManager(EntityManagerFactory emf){
EntityManagerHelper.emf = emf;
}
public static EntityManager getEntityManager() {
EntityManager manager = threadLocal.get();
if (manager == null || !manager.isOpen()) {
manager = emf.createEntityManager();
threadLocal.set(manager);
}
return manager;
}
public static void closeEntityManager() {
EntityManager em = threadLocal.get();
threadLocal.set(null);
if (em != null)
em.close();
}
// 开始事务的方法
public static void beginTransaction() {
getEntityManager().getTransaction().begin();
}
// 提交事务的方法
public static void commitTransaction() {
getEntityManager().getTransaction().commit();
}
// 回滚事务的方法
public static void rollback() {
getEntityManager().getTransaction().rollback();
}
// 生成查找的方法
public static Query createQuery(String query) {
return getEntityManager().createQuery(query);
}
public static void log(String string, Level info, Object object){
// TODO Auto-generated method stub
}
}
不使用withInitial()?
执行方法时机在Spring注入之前
EntityManagerFactory注入方式
@Component+@AutoWired
@Repository+@PersistenceUnit