-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。如何强制休眠也搜索会话中的附加对象?

我试过了

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

但以上似乎也返回错误。处理此类情况的正确方法是什么?默认情况下不应该休眠搜索附加的会话对象和数据库吗?

我不想提交的原因是因为我想在提交之前更新产品的计数属性。

我可以创建一个产品地图,然后在最后提交,但是在 100,000 个产品名称列表中循环两次非常昂贵。

如果我知道我可以使用 session.get(id) 的 id 但我如何通过属性名称进行搜索?

4

1 回答 1

0

保存后的 em.flush() 成功了。

于 2013-02-20T06:21:47.447 回答