Мы используем jpa с Toplink в качестве реализации и столкнулись с проблемой обновления списков сущностей.
В основном это сценарий:
private List<Entity> findAll()
{
final String sql = "SELECT e from " + anEntityClass.getSimpleName() + " e";
final Query query = itsManager.createQuery(sql);
List<Entity> result = query.getResultList();
return result;
}
Но если мы изменим базу данных с помощью внешних средств, второй вызов метода findAll () вернет устаревшую информацию, поскольку он повторно использует информацию, хранящуюся в кэше.
Одним из решений этой проблемы является указание
query.setHint("toplink.refresh", "True");
Так что мы всегда получаем обновленные данные. Но тогда мы зависим от Toplink и столкнемся с проблемой, если нам потребуется сменить провайдера.
Я знаю, что есть метод entityManager.refesh (), но я видел его только в сочетании с entitytManager.find (), чтобы получить только одну сущность.
Существует ли какой-либо стандартный способ получения свежих данных для списка объектов?