2012-07-31 50 views
1

如果您在行使CRUD方法做你必須做這個(交易類型:RESOURCE_LOCAL沒有JTA)你每次訪問你的數據庫時都需要創建EntityManager()嗎?

@PersistenceUnit(unitName="mongo") 
EntityManagerFactory emf; 

EntityManager em; 


@Inject 
private SomeObj injectableObj; 

public void create() 
{ 
    em = emf.createEntityManager(); <---- here 
    SomeObj obj = new SomeObj(); 
    em.persist(obj); 
} 

public void read() 
{ 
    em = emf.createEntityManager(); <---- here 
    Query query = em.createQuery("Select s from SomeObj s"); 

} 

public void update() 
{ 
    em = emf.createEntityManager(); <---- here 
    SomeObj s = em.find(SomeObj.class, injectableObj.getId()); 
    s.setSomeObj(injectableObj.getSomeObj()); 

} 

public void delete() 
{ 

    em = emf.createEntityManager(); <---- here 
    SomeObj s = em.find(SomeObj.class, injectableObj.getId()); 
    em.remove(s); 
} 

問:反正是有注入的EntityManager?

+0

你需要使用ThreadLocal這種類型的任務。請看這裏http://www.naildrivin5.com/daveblog5000/?p=39和這裏http://javanotepad.blogspot.com/2007/08/managing-jpa-entitymanager-lifecycle.html - 這是給更多實現細節 – 2012-07-31 14:14:39

回答

1

也許嘗試在這裏尋找exemples:

Injections EntityManager

我更喜歡使用:通過注射@PersistenceContext

+0

這是一個NoSQL數據庫。事務類型是RESOURCE_LOCAL NOT JTA。這就是說,你不能使用PersistencContext並注入entitymanager。 – stackoverflow 2012-07-31 14:15:05

0

您可以使用注射。我使用它是這樣的:

@PersistenceContext(unitName = "some_jndi_name") 
private EntityManager em; 
+0

這是一個NoSQL數據庫(如unit_name =「mongo」所示)。事務類型是RESOURCE_LOCAL NOT JTA。這就是說,你不能使用PersistencContext並注入實體管理器 – stackoverflow 2012-07-31 14:16:15

+0

對不起,今天我不是一個細心的讀者。 :( – gkuzmin 2012-07-31 14:54:44

+0

這很好,你有什麼建議嗎? – stackoverflow 2012-07-31 14:55:48

相關問題