java - HQL 查询未删除托管对象

标签 java hibernate hql jpql

我正在开发 Hibernate(3.3.2.GA - 由于该软件应该很快发布,所以没有时间更新)应用程序的继承代码库,我正在尝试从该应用程序中删除一些对象数据库。 通过 HQL 查询删除对象后,仍然可以通过(MyEclipse 生成的)dao 的 findById 方法从 hibernate session 中检索对象。我是否缺少任何东西才能让物体消失?我需要使一些缓存失效吗?经过看似随机的一段时间(大约 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;
}

感谢任何帮助!

最佳答案

不确定您如何获得 session ,但建议执行以下操作:

getSessionFactory().openSession();

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

干杯!!

关于java - HQL 查询未删除托管对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18616313/

相关文章:

java - 尝试创建代理对象时出现 ClassCastException

java写入带有值的xml属性

java - 为什么我不能使用 Graphics 在 JPanel 上绘画?

mysql - Hibernate 多重连接

java - Hibernate 数据检索改进。

java - 动态创建公共(public)变量Java

java - 奇怪的 java.sql.SQLException : Column 'fk_Content' not found

java - 查询语法异常 : Path expected for join

java - SELECT 子句中带有子查询的 JPQL/Hibernate 查询

java - Hibernate - 不能将 GROUP BY 与 ORDER BY 一起使用