Ensuite, il y a la validation de la logique métier. Par exemple : la startDate de l'entité User doit être postérieure à un événement et le count doit être supérieur à un certain X si la date de naissance du dernier utilisateur créé est en été, sinon, l'entité devrait être rejetée par le service utilisateur.
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private SomeEventService someEventService ;
@Override
public User create(User entity) {
String error = this.validateUser(entity);
if (StringUtils.isNotBlank(error)) {
throw new ValidationException(error);
}
return this.userRepository.save(entity);
}
....
private String validateUser(User entity) {
SomeEvent someEvent = this.someEventService.get(entity.getName());
if (entity.getStartDate().before(someEvent.getDate())) {
return "startDate";
}
User lastUser = this.userRepository.findLast();
....
}
}
Cependant, j'ai l'impression que ce n'est pas la meilleure approche pour gérer la validation de la logique métier. Que devrais-je faire? ConstraintValidator/HibernateValidator/écouteurs d'événements JPA ? Peuvent-ils fonctionner au niveau de la classe @Entity ou dois-je en créer X pour chaque vérification de champ différent ? Comment faites-vous dans une application de production réelle ?