У меня есть два приложения - сервер, который имеет связь с базой данных, и клиент, который не имеет. Сервер загружает объект и отправляет его клиенту. Клиент редактирует его и отправляет обратно, чтобы сервер мог его обновить. Но ... есть много Клиентов, и многие из них могут редактировать эту сущность и хотят обновить ее со своим собственным значением, но я хочу, чтобы Сервер обновил ее только в том случае, если она не была обновлена с момента ее отправки Клиенту. А именно: клиенты пытаются установить статус заявки на свое собственное значение, но только если текущий статус в базе данных такой же, какой был, когда тот клиент получил его. В настоящее время у меня так:
public boolean changeStatus (Ticket ticket, short newStatus) {
short previousStatus = ticket.getStatus();
boolean result = false;
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
String sql = "UPDATE ticket SET status = :newStatus WHERE idTicket = :idTicket AND status = :previousStatus";
NativeQuery query = session.createSQLQuery(sql);
query.setParameter("idTicket", ticket.getIdTicket());
query.setParameter("newStatus", newStatus);
query.setParameter("previousStatus", previousStatus);
result = query.executeUpdate() == 1;
но иногда я также хочу установить другие атрибуты и проверить, не изменились ли другие атрибуты, и использование этого метода сделает его очень уродливым, и я хочу, чтобы он был более объектно-ориентированным, а не простым sql. Есть предложения?
Забыл упомянуть, что у каждого Клиента есть свой собственный Серверный поток, который может попытаться обновить