Лучший способ получить сеанс и выпуск сеанса в HIbernate / SQL - PullRequest
1 голос
/ 30 марта 2012

Рассмотрим два приведенных ниже кода.

Session session = null;
query = "update Employee set EMPLOYEE_NAME = 'Jay' where EMPLOYEE_ID = 1";

    try {
        session = getSession();
        Query query = session.createSQLQuery(dlquery);
        query.executeUpdate();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if(session != null) {
            releaseSession(session);
        }
    }

И ....

Session session = getSession();
query = "update Employee set EMPLOYEE_NAME = 'Jay' where EMPLOYEE_ID = 1";
    try {
        Query query = session.createSQLQuery(dlquery);
        query.executeUpdate();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if(session != null) {
            releaseSession(session);
        }
    }

Какой из двух вариантов лучше использовать?Или есть лучший способ?Что я тут не так делаю?

Кроме того, мы должны выполнить нулевую проверку перед вызовом releaseSession (session) в finally?

Ответы [ 5 ]

2 голосов
/ 30 марта 2012

Действительно, лучший способ - использовать Spring и его поддержку JPA / Hibernate .... Вам никогда не придется иметь дело с этим в своем коде.

1 голос
/ 31 марта 2012

Если getSession() по какой-то причине вызывает исключение, не будет ли это проблемой во втором решении?

1 голос
/ 30 марта 2012

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

1 голос
/ 30 марта 2012

Честно говоря, я бы сказал, что между ними не было большой разницы, но вы всегда должны проверять, является ли сеанс нулевым, просто чтобы не вызывать еще одно исключение NullReferenceException.

К сожалению, это, вероятно, самый чистый способ сделать это в Java, поскольку нет такой вещи, как оператор «using», как в C #, который позволяет вам избавиться от объекта после завершения выполнения блока using.

0 голосов
/ 31 марта 2012

Используйте приведенный ниже синтаксис для получения и выпуска сессии.

        session = getSession();
        Query query = session.createSQLQuery(dlquery);
        query.executeUpdate();
        session.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...