Каков наилучший способ открыть транзакцию и иметь связи с БД в Spring MVC - PullRequest
0 голосов
/ 02 марта 2019

я развернул свой spring mvc appliction на сервере (в производстве) спустя несколько месяцев, когда мой сервер приложений рухнул tomcat. Я спросил компанию, занимающуюся хостингом приложений, почему это происходит.

они сказали, что нет.файла war на сервере больше, и ваши подключения к базе данных более необходимы для их закрытия после транзакции.

но я хочу сказать, что я использую Spring MVC Framework, который заботится об открытии и закрытии соединения. Но хостингКоманда говорит мне, что организуйте ваш mysql

, если мой подход верен или нет, пожалуйста, посмотрите мой код

контроллер:

 @GetMapping("/getStudentDetails")
 public ResponseEntity<Map<String, Object>> getStudentDetails()
{
    List<Students> stus= examService.getStudentDetails();
}

Реализация сервиса

@Override
@Transactional  //here starts only one transaction
public List<Students> getStudentDetails( ) {

    return examDao.getStudentDetails();
} 

Реализация DAO

 @Override
        public List<Students> getStudentDetails() {
    // here i will have no of connections to get student details as follows

currentSession = sessionFactory.getCurrentSession();
//get student details
Query query=currentSession .createQuery(" from  StudentDetais");
query.list();

//get student parent details
Query query=currentSession .createQuery(" from  StudentParentDetais");
query.list();
    }

//get student personal details
Query query=currentSession .createQuery(" from  StudentPersonalDetais");
query.list();
    }
...........
............. so on...

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

этот подход портит мое приложение?

Должен ли я@Transactional для каждого учащегося, так что соединение с учеником будет всегда открываться и закрываться.

отправить один идентификатор студента с контроллера, выполнить транзакцию и закрыть и отправить другой идентификатор студента из контроллераr и сделайте транзакцию .... так далее.

пожалуйста, решите мою проблему, которая не может иметь никаких соединений в одной транзакции?спасибо.

1 Ответ

0 голосов
/ 02 марта 2019

JPA-запрос может вернуть список прокси.JPA может продолжать использовать соединение, пока геттеры не будут вызваны на прокси.Решением может быть использование DTO и проверка их после каждого запроса с данными, возвращаемыми слоем JPA.

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