Управляемые объекты не удалены по HQL-запросу

Я работаю над унаследованной кодовой базой Hibernate (3.3.2.GA - и поскольку программное обеспечение должно быть отправлено довольно скоро, у меня нет времени на обновление), в котором я пытаюсь удалить некоторые объекты из базы данных. После удаления объектов с помощью HQL-запроса объекты все еще можно извлечь из сеанса гибернации с помощью метода findById (созданного MyEclipse). Я что-то упускаю, чтобы Объекты исчезли? Нужно ли делать недействительными некоторые кэши? После ожидания, казалось бы, случайного времени (между 30 и 300 секундами) findById начинает возвращать ноль. Объекты используют составной идентификатор. Может ли это быть проблемой?

Вот код для удаления объектов:

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();

Вот код, который вызывается впоследствии для извлечения объектов из базы данных. Я ожидаю, что это вернет ноль, но это не так.

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 ответ

Не уверен, как вы получаете сессию, но рекомендую следующее:

getSessionFactory().openSession();

Таким образом, вы всегда получите новый сеанс, и все, что было кэшировано в предыдущем сеансе, не будет возвращено.

Ура!!

Другие вопросы по тегам