2013-02-20 39 views
-1

我「使用Spring MVC和Hibernate和MySQL米休眠沒有找到連接在會話實體

我已經得到了基本上沒有這個

@Transactional("transactionName") 
public Product find(List<String> allProductNames){ 
    for(String product: allProductNames){ 
     //find product with productName 
     Product product = em.createQuery(hql).getSingleResult()); 
     if(product == null){ 
      //create product object 
      em.persist(newProduct) 
     } 
    } 
} 

由於保存和搜索是其中的一部分代碼同樣的事務,沒有任何東西被提交,直到它退出方法爲止,查詢到數據庫以查找帶有productName的產品總是返回null。我如何強制hibernate在會話中搜索連接的對象?

我試過

SessionImpl session = (SessionImpl) em.getDelegate(); 
Query query = session.createQuery("searchproductnamequery") 
        .setParameter("PRODUCT_NAME","iPhone"); 
boolean found = session.contains(query); 

但上述似乎返回虛假。處理這些情況的正確方法是什麼?不應該在默認情況下搜索附加的會話對象和數據庫?

我不想提交的原因是因爲我想在提交之前將計數屬性更新爲產品。

我可以創建一個產品的地圖,然後在最後提交,但是通過兩次100,000次productNames列表循環兩次是非常昂貴的。

如果我知道我可以使用session.get(id)的id,但是如何通過屬性名稱進行搜索?

+0

query.addEntity(Product.class) – swamy 2013-02-20 05:30:55

回答

0

em.flush()在保存之後做了訣竅。