@RequestMapping("/testing")
@Transactional
public String testing(HttpServletRequest request, final ModelMap model)
{
Criteria criteria = session.getCurrentSession().createCriteria(Student.class);
criteria.setReadOnly(true);
criteria.add(Restrictions.eq("id", "ID12345"));
List<Student> result = criteria.list();
Student abc = result.get(0);
abc.setFirstname("AAA");
Criteria criteria2 = session.getCurrentSession().createCriteria(Student.class);
criteria2.setReadOnly(false);
criteria2.add(Restrictions.eq("id", "ID12345"));
result = criteria2.list();
Student abc2 = result.get(0);
abc2.setFirstname("BBB");
return "testing";
}
Как видно из кода выше, он имеет setReadOnly
к истинным для criteria
, так firstName
не будет AAA
(в базе данных), но это сбросить setReadOnly
ложь для criteria2
, почему firstname
не стал BBB
(в базе данных)?Hibernate Критерии SetReadOnly не работает на втором запросе
Вам не нужно сохранять объект? –
@ScaryWombat Я уже упрощаю сценарий, в моем фактическом коде он имеет несколько уровней обслуживания и класса модели и несколько методов между ними. Поэтому я создал этот упрощенный сценарий, чтобы выяснить причину моей проблемы. Да, я хочу сохранить объект, но я бы не смог удалить 'criteria.setReadOnly (true)' (это в другом методе). – GMsoF
Что делать, если вы поместите второй вызов методом, отмеченным @Transactional (распространение = Propagation.REQUIRES_NEW), чтобы начать новую транзакцию? – StanislavL