【问题标题】:Hibernate not finding entity attached in session休眠未找到会话中附加的实体
【发布时间】:2013-02-20 04:59:51
【问题描述】:

我正在使用 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);

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

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

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

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

【问题讨论】:

  • query.addEntity(Product.class)

标签: hibernate jpa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-09-12
    • 2020-02-16
    • 2021-01-30
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2018-11-30
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多