Я хотел знать, когда нам следует использовать @Transactional в Spring Boot Services.
Поскольку метод save() JpaRepository помечен @Tranasactional code> необходимо ли мне добавлять эту аннотацию в мой метод службы?
Я видел пару статей, в которых говорилось, что если внутри вашего метода службы используется только репозиторий ( как в приведенном ниже сценарии), то нет необходимости помещать @Transactional в метод службы, поскольку save() уже помечено @Transactional. Это правда?
class EmployeeService {
@Autowired
EmployeeRepository repo;
@Transactional //(Is it required here?)
public void saveEmployee(Employee employee) {
repo.save(employee)
}
}
Следует ли использовать его в приведенном ниже случае в методе getStudentsWithNameStartsWithAndGradeLessThan(), поскольку мы используем более одного репозитория?
@Getter
@Setter
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "average_grade")
private Short averageGrade;
}
public interface StudentRepository extends JpaRepository {
Set findByAverageGradeLessThan(Short averageGrade);
Set findByNameStartsWithIgnoreCase(String name);
}
@Service
public class StudentService {
private final StudentRepository studentRepository;
public StudentService(StudentRepository studentRepository) {
this.studentRepository = studentRepository;
}
@Transactional //(Is it required here?)
public Set getStudentsWithNameStartsWithAndGradeLessThan(String prefix, Short averageGrade) {
Set students = studentRepository.findByNameStartsWithIgnoreCase(prefix);
students.retainAll(studentRepository.findByAverageGradeLessThan(averageGrade));
return students;
}
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... annotation