Фактическая проблема, с которой я столкнулась, - это принудительное обновление затмения, независимо от содержимого кеша. В настоящее время eclipselink не создает новые операторы обновления, если новое обновление имеет то же значение, что и в кеше. Я не хочу использовать свойство refresh ( ) в файле persistence xml.подсказки для исправления сеттинга
Я ищу решение, в котором я могу указать обновляемому объекту, чтобы не использовать значения в кеше.
EntityManager em=getEntityManager();
EntityTransaction t = em.getTransaction();
t.begin();
Ticket ticket = get(ticketId);
if(ticket == null) {
return null;
}
ticket.setState(status);
em.persist(ticket);
t.commit();
Если я изменяю выше обновление (метод SetState) на запрос SQL, то объект запроса имеет опцию, чтобы сделать setHint, где можно отметить setHint (QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache). Я не могу этого сделать, поскольку таких обновлений много.
В приведенном выше фрагменте обновления происходит с использованием метода setter, в этом сценарии, как мы указываем намек на игнорирование кеша? Или есть ли другой способ сделать обновления с помощью объекта setter?
My problem is similar to this : http://www.eclipse.org/forums/index.php/m/660750/
Благодарим вас заранее.
Да я снял вызов упорствовать в настоящее время. Причина, по которой я хочу обновить один и тот же набор значений, заключается в том, что есть возможность для поля состояния манипулировать из другого источника. В этом случае я хочу, чтобы поле состояния также обновлялось из приложения. В настоящее время этого не происходит, так как кеш eclipselink не знает о прямых изменениях. Не могли бы вы привести пример использования фиктивного счетчика? – user1096318
@Nizet, было ли ваше предложение добавить новый счетчик в сущности, а также новый столбец в таблице? Есть ли другое решение, кроме изменения объекта? – user1096318
EntityManager em = getEntityManager(); \t \t EntityTransaction t = em.getTransaction(); \t \t \t \t t.begin(); \t \t \t \t Ticket ticket = get (ticketId); \t \t em.обновить (билет); \t \t \t \t если (нулевой билет ==) { \t \t \t возвращение нулевой; \t \t} \t \t \t \t ticket.setState (статус); \t \t \t \t \t \t t.commit(); \t \t билет в оба конца; \t \t \t \t Теперь для меня действует em.refresh (билет). Существуют ли какие-либо недостатки использования em.refresh (entity)? \t \t Есть ли другой способ использования подсказок/свойств, чтобы каждое обновление обновлялось. – user1096318