Код загрузки репозитория JPA при загрузке, даже если @Transactional размещен в слое Service - PullRequest
0 голосов
/ 15 марта 2020

См. Ниже код загрузки пружины

Я использовал JPA-репозиторий.

  1. Контроллер.
  2. Сервис.
  3. Репозиторий

BaseController

package com.controller;

import com.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class BaseController {

    @Autowired
    private StudentService studentService;

    @GetMapping(value = "/addStudent", produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public ResponseEntity<String> base() {


        studentService.save();

        return new ResponseEntity<String>("SUCCESS", HttpStatus.OK);
    }
}

StudentService. java

package com.service;

import com.model.Student;
import com.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service("studentService")
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentRepository studentRepository;

    @Override
    @Transactional
    public Student save() {

        Student student = new Student();
        student.setFirstName("ABC");
        student.setLastName("PQR");
        studentRepository.save(student);

        int i = 10 / 0;  //Error code

        return student;
    }
}

StudentRepository

package com.repository;

import com.model.Student;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("studentRepository")
public interface StudentRepository extends CrudRepository<Student, Long> {

    public List<Student> findAll();

}

Application.properties

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
#maximum number of milliseconds that a client will wait for a connection
spring.datasource.hikari.connection-timeout = 20000
#minimum number of idle connections maintained by HikariCP in a connection pool
spring.datasource.hikari.minimum-idle= 10
#maximum pool size
spring.datasource.hikari.maximum-pool-size= 10
#maximum idle time for connection
spring.datasource.hikari.idle-timeout=10000
# maximum lifetime in milliseconds of a connection in the pool after it is closed.
spring.datasource.hikari.max-lifetime= 1000
#default auto-commit behavior.
spring.datasource.hikari.auto-commit =false

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.jdbcUrl=jdbc:mysql://localhost:3306/demo?autoReconnect=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.show-sql=true
spring.jpa.properties..hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update

После выполнения метода сохранения из StudentRepository данные сразу вставляются в базу данных. в StudentServiceImpl не работает откат или любые другие уровни изоляции. java, даже если имеется код ошибки. Я попытался установить "spring.datasource.hikari.auto-commit =true" значение настройки true , поместил @Transaction на вершину класса StudentServiceImpl. java, но все равно это не сработало.

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Это, вероятно, из-за поведения Open Jpa in View.
Запишите следующую строку в свой файл свойств:

spring.jpa.open-in-view=false

посмотрите на это, если вы хотите узнать больше .

0 голосов
/ 15 марта 2020
  1. Вам не нужно связываться с любыми настройками hikari, и уж точно не с autoCommit (true), поскольку это ОТКЛЮЧАЕТ транзакции. Удалите все эти свойства.
  2. Где "ошибка" в вашем коде? Спринг-ролл возвращается к непроверенным исключениям кидающимся (не проверенные или ошибки), я не вижу этого в вашем коде.
  3. Какое поведение вы ожидаете? Это выглядит хорошо для меня.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...