Проблема с загрузкой базы в спящем режиме - PullRequest
0 голосов
/ 27 октября 2019

Этот код для обновления базы данных работает нормально, когда он работает в JDBC, но когда я пытаюсь запустить в спящем режиме, я получаю эту ошибку: Исключение в потоке "AWT-EventQueue-0" java.lang.IllegalArgumentException: позиционный параметр* не существует : 5 в запросе: ОБНОВЛЕНИЕ uposlenik SET ime = ?, prezime = ?, adresa = ?, plata =? WHERE ID =?

Я пытался изменить запросы разными способами, но каждый раз, когда я получаю какую-то ошибку, и если я не получаю ошибку, она не будет обновляться

session = Sesija.kreirajSesiju();
    Transaction tr = session.beginTransaction();
    SQLQuery query=session.createSQLQuery ("UPDATE uposlenik SET ime=?,prezime=?,adresa=?,plata=? WHERE id= ?");
        query.setString(1, jText_Ime.getText());
        query.setString(2, jText_Prezime.getText());
        query.setString(3, jText_Adresa.getText()); 
        query.setString(4, jText_Plata.getText()); 
        query.setString(5, jText_id.getText());


     query.executeUpdate();
     tr.commit();
  // 
     session.close();    

1 Ответ

1 голос
/ 27 октября 2019

Положение параметра начинается с нуля, что означает, что вы должны начинать положение параметра с нуля:

SQLQuery query=session.createSQLQuery ("UPDATE uposlenik SET ime=?,prezime=?,adresa=?,plata=? WHERE id= ?");
        query.setString(0, jText_Ime.getText());
        query.setString(1, jText_Prezime.getText());
        query.setString(2, jText_Adresa.getText()); 
        query.setString(3, jText_Plata.getText()); 
        query.setString(4, jText_id.getText());

Кстати, лучший способ обновления записи в Hibernate - это получить экземпляр объекта, который выхотите обновить, а затем обновить состояние объекта, вызывая его метод, а не писать UPDATE SQL вручную. Также рассмотрите возможность использования JPA API (т.е. EntityManager), а не собственного Hibernate API (например, Session). Только разверните EntityManager до Session, чтобы использовать специфическую функцию Hibernate, если что-то не может быть сделано с JPA. Короче говоря, коды лучших практик должны выглядеть так:

 EntityTransaction tr = entityManager.getTransaction();
 tr.begin();

 Uposlenik uposlenik = entityManager.find(Uposlenik.class, 1);
 if(uposlenik == null){
    throw new RuntimeException("The record does not exist");
    tr.rollback();
 }
 uposlenik.updatePrice(123);
 ......

 tr.commit();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...