Tôi đang cố sử dụng chú thích @Transactional
trong một phương pháp trên dịch vụ của tôi để tải một trường một cách lười biếng. Tuy nhiên, sử dụng @Transactional
trên lớp Triển khai của tôi làm cho tất cả các trường tự động là null
.Khởi động mùa xuân 2 Chú thích @Transactional làm cho các trường Autowired rỗng
Đây là triển khai thực hiện của tôi:
@Service
public class UserServiceImpl implements UserService {
/**
* DefaultMapper.
*/
@Autowired
private DefaultMapper defaultMapper;
/**
* Resource service injection.
*/
@Autowired
private ResourceService resourceService;
/**
* UserRepository.
*/
@Autowired
private UserRepository userRepository;
/**
* Jwt Factory.
*/
@Autowired
private JwtService jwtService;
@Override
@Transactional
public final UserDto findByLogin(final String login) throws ResourceNotFoundException {
// user repository is null here when using @Transactional
User user = this.userRepository.findByLogin(login)
.orElseThrow(() -> new ResourceNotFoundException(
resourceService.getMessage(MessageBundle.EXCEPTION, "resource.notfound.user.login")
));
UserDto userDto = defaultMapper.asUserDtoWithRoles(user);
return userDto;
}
Cảm ơn bạn trước.
Xóa 'final' khỏi phương thức của bạn hoặc đặt' spring.aop.proxy-target-class = false' trong 'application.properties' của bạn. ** LƯU Ý: ** Điều này yêu cầu khởi động Spring 1.5.3 hoặc hoạt động đầy đủ! –
Ngữ cảnh giao dịch có được bật trong ứng dụng mùa xuân của bạn không? – drgPP
Thực hiện một giao dịch là phần lớn thời gian vô dụng trong một hành động đọc, bạn có chắc là bạn cần một giao dịch đọc không? – Zorglube