Hibernate如何将标准转换为HQL?

Hibernate如何将标准转换为HQL?,hibernate,hql,hibernate-criteria,Hibernate,Hql,Hibernate Criteria,我对条件查询有问题 在另一种方法中,我使用HQL查询来删除数据库中的一些对象。 查询是有效的 实际上,在另一种方法中,我执行获取对象的条件查询。 当我获取对象时,它们不会与数据库同步 所以 1.如何在roder中同步此条件查询以获取真实对象? 2.如果1。不可能,我想将条件查询转换为HQL 这里是我的条件查询: final Criteria crit = session.createCriteria(ObjectDao.class); if (clientName != null

我对条件查询有问题

在另一种方法中,我使用HQL查询来删除数据库中的一些对象。 查询是有效的

实际上,在另一种方法中,我执行获取对象的条件查询。 当我获取对象时,它们不会与数据库同步

所以 1.如何在roder中同步此条件查询以获取真实对象? 2.如果1。不可能,我想将条件查询转换为HQL

这里是我的条件查询:

    final Criteria crit = session.createCriteria(ObjectDao.class);
    if (clientName != null && clientName.length() > 0) {
        crit.createAlias("objectType.client", "client");
        crit.add(Restrictions.eq("client.name", clientName));
    }
    if (objectType != null && objectType.length() > 0) {
        crit.createAlias("objectType", "objectType");
        crit.add(Restrictions.eq("objectType.type", objectType));
    }
    final List<ObjectDao> ret = crit.list();
final Criteria crit=session.createCriteria(ObjectDao.class);
if(clientName!=null&&clientName.length()>0){
crit.createAlias(“objectType.client”、“client”);
标准添加(Restrictions.eq(“client.name”,clientName));
}
if(objectType!=null&&objectType.length()>0){
createAlias(“objectType”、“objectType”);
标准添加(Restrictions.eq(“objectType.type”,objectType));
}
最终列表ret=crit.List();
和HQl转换的查询不起作用

    String hqlQuery = "select ObjectDao where objectType.client.name = :clientName";
    Query query = session.createQuery(hqlQuery)
    // .setParameter("objectList", objectType)
            .setParameter("clientName", clientName);
    final List<ObjectDao> ret2 = query.list();
String hqlQuery=“选择ObjectDao,其中objectType.client.name=:clientName”;
Query=session.createQuery(hqlQuery)
//.setParameter(“对象列表”,对象类型)
.setParameter(“clientName”,clientName);
final List ret2=query.List();

谢谢

看起来您正在使用二级缓存。如果是这样的话,这也行不通

select o from ObjectDao o where o.objectType.client.name = :clientName

如果我理解正确,您正在执行一个查询,如

delete from Client where ...
然后执行一个条件查询,该查询返回ObjectDAO,其中仍有您刚刚删除的客户端

如果这是正确的,那么这是预期的行为。DML样式查询(即更新和删除查询)绕过会话。这意味着,如果删除的某个对象在执行删除查询之前已加载到会话中,Hibernate将不会从会话中删除它们,并且会话不会反映数据库的实际状态

使用Session.delete删除对象,并确保在内存中维护对象图


或者在删除查询后刷新并清除会话。

是否使用某种Hibernate 2级缓存?
session.clear();session.flush()在HQL delete之后已完成,但对象仍在此处。我做了一个HQL删除,以提高性能,这在删除标准方面不是很好。首先,用户可以显示要删除的对象,所以我使用Criteria和HQLQuery2进行了此操作。用户看到对象,如果他同意,他可以在按下“删除”按钮时删除对象如果他不同意,如果他可以在表单中输入新参数并单击“显示”按钮查看他可能要删除的对象我已将删除标准更改为HQL以改进petfs,为了删除许多对象,HQL delete更好,但现在显示步骤不好:(如果在HQL获取后,我添加了clear/close:issue!:(Thxy查询工作,但对象仍在会话中evan如果我使用HQL:(