管理对象未被HQL查询删除

时间:2013-09-04 14:16:51

标签: java hibernate hql jpql

我正在研究Hibernate的继承代码库(3.3.2.GA - 因为该软件很快就会发货,没有时间更新)我试图删除的应用程序数据库中的一些对象。 通过HQL查询删除对象后,仍然可以通过(MyEclipse generated)dao的findById方法从hibernate会话中检索对象。有没有什么我想让对象消失?我是否需要使一些缓存无效?在等待看似随机的时间(大约30到300秒之间)之后,findById开始返回null。 对象使用复合id。这可能是个问题吗?

以下是删除对象的代码:

Query query = objDao.getSession()
            .createQuery("DELETE FROM Obj i WHERE i.id.uuid = ? AND i.userId = ?");
query.setString(0, obj.getUuid());
query.setInteger(1, currentUserId);
objDao.getSession().beginTransaction();

int numRows = query.executeUpdate();
System.out.println("Deleted " + numRows + " Obj for uuid " + obj.getUuid() + " (user: "
            + currentUserId+ ")");
objDao.getSession().flush();
objDao.getSession().getTransaction().commit();

以下是从数据库中检索对象后调用的代码。我希望这会返回null,但事实并非如此。

objDao.findById(new ObjectId(temp.getId(), temp.getUuid()))

objDao.findById实现如下:

public Obj findById(com.application.ObjectId id) {
    Obj instance = (Obj) getSession() // this returns a org.hibernate.Session
    .get("com.application.Obj", id);
    return instance;
}

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

不确定如何获得会话,但建议遵循:

getSessionFactory().openSession();

这样您将始终获得新会话,并且不会返回上一个会话中缓存的任何内容。

干杯!!