Осмотревшись, я не смог найти никакого хорошего решения для этого.
Моя autowired не работала должным образом, когда она возвращала null. Я автоматически подключил этот конкретный класс к другим классам, и он работает, поэтому он не работает только в классах проверки ограничений.
Ошибка
java .lang.IllegalStateException: Не удалось выполните CommandLineRunner в org.springframework.boot.SpringApplication.callRunner (SpringApplication. java: 798) ~ [spring-boot-2.3.1.RELEASE.jar: 2.3.1.RELEASE] в org.springframework.boot.SpringApplication. callRunners (SpringApplication. java: 779) ~ [spring-boot-2.3.1.RELEASE.jar: 2.3.1.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication. java: 322) ~ [spring-boot-2.3.1.RELEASE.jar: 2.3.1.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication. java: 1237) ~ [spring-boot-2.3.1.RELEASE. jar: 2.3.1.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication. java: 1226) ~ [spring-boot-2.3.1.RELEASE.jar: 2.3.1.RELEASE] в com. Alex.Mains.JpaApplication.main (JpaApplication. java: 21) ~ [классы /: na] Вызвано: org.springframework.transac tion.TransactionSystemException: не удалось зафиксировать транзакцию JPA; вложенным исключением является javax.persistence.RollbackException: Ошибка при фиксации транзакции в org.springframework.orm.jpa.JpaTransactionManager.doCommit (JpaTransactionManager. java: 543) ~ [spring-orm-5.2.7.RELEASE.jar: 5.2 .7.RELEASE] в org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit (AbstractPlatformTransactionManager. java: 743) ~ [spring-tx-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в orgramework.spring .transaction.support.AbstractPlatformTransactionManager.commit (AbstractPlatformTransactionManager. java: 711) ~ [spring-tx-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.transaction.interceptor.TransactionAfterTransaction.comRELEASE.com TransactionAspectSupport. java: 632) ~ [spring-tx-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport. java: 386 *1038*: [spring-tx-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.transaction.in terceptor.TransactionInterceptor.invoke (TransactionInterceptor. java: 118) ~ [spring-tx-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.proceed (ReflectiveMethod). 1040 *: 186) ~ [spring-aop-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke (PersistenceExceptionTranslationInterceptor. java: 139) ~ [spring- tx-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation. java: 186) ~ [spring-aop-5.2.7.RELEASE.jar : 5.2.7.RELEASE] в org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor $ CrudMethodMetadataPopulatingMethodInterceptor.invoke (CrudMethodMetadataPostProcessor. 178-jpa ~: 2.3-ja-rus-dataPostProcessor. 2.3.1.RELEASE] в org.springframework.aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation. java: 186) ~ [spring-aop-5.2.7.RELEASE.jar: 5.2.7.RE АРЕНДА] в org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke (ExposeInvocationInterceptor. java: 95) ~ [spring-aop-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.aop. framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation. java: 186) ~ [spring-aop-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.invoke 1047 *: 212) ~ [spring-aop-5.2.7.RELEASE.jar: 5.2.7.RELEASE] в com.sun.proxy. $ Proxy93.save (Неизвестный источник) ~ [na: na] в com.Alex .Mains.UserRepositoryCommandLineRunner.run (UserRepositoryCommandLineRunner. java: 26) ~ [классы /: na] в org.springframework.boot.SpringApplication.callRunner (SpringApplication. java: 795) ~ [spring-boot-2.3.1.RELEASE.jar: 2.3.1.RELEASE] ... 5 общих кадров пропущены Причина: javax.persistence.RollbackException: ошибка при фиксации транзакции в org.hibernate.internal.ExceptionConverterImpl. convertCommitException (ExceptionConverterImpl. java: 81) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.engine.transaction.internal.TransactionImpl.commit (TransactionImpl. java : 104) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.springframework.orm.jpa.JpaTransactionManager.doCommit (JpaTransactionManager. java: 534) ~ [spring-orm- 5.2.7.RELEASE.jar: 5.2.7.RELEASE] ... 21 общий кадр пропущен Причина: javax.validation.ValidationException: HV000028: Неожиданное исключение во время вызова isValid. в org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint (ConstraintTree. java: 186) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate. validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints (SimpleConstraintTree. java: 62) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.validator.internal.engine .constraintvalidation.ConstraintTree.validateConstraints (ConstraintTree. java: 75) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.validator.internal.metadata.core.MetaConstraint. doValidateConstraint (MetaConstraint. java: 130) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint (MetaConstraint. java: 123) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint (ValidatorImpl. java: 555) ~ [ спящий режим-валидатор- 6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement (ValidatorImpl. java: 518) ~ [hibernate-validator-6.1.5.Final.jar : 6.1.5.Final] в org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup (ValidatorImpl. java: 488) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup (ValidatorImpl. java: 450) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.validator. internal.engine.ValidatorImpl.validateInContext (ValidatorImpl. java: 400) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.validator.internal.engine.ValidatorImpl.validate (ValidatorImpl. java: 172) ~ [hibernate-validator-6.1.5.Final.jar: 6.1.5.Final] в org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate (BeanValidationEventListener. java: 116) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Fi nal] в org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert (BeanValidationEventListener. java: 80) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.action. internal.EntityInsertAction.preInsert (EntityInsertAction. java: 227) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.action.internal.EntityInsertAction.execute (EntityInsertAction. java: 100) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.engine.spi.ActionQueue.executeActions (ActionQueue. java: 604) ~ [hibernate- core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.engine.spi.ActionQueue.lambda $ executeActions $ 1 (ActionQueue. java: 478) ~ [hibernate-core-5.4.17. Final.jar: 5.4.17.Final] в java .base / java .util.LinkedHashMap.forEach (LinkedHashMap. java: 723) ~ [na: na] at org.hibernate.engine.spi. ActionQueue.executeActions (ActionQueue. java: 475) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.event.internal.AbstractFlushingEventListener.performExecution s (AbstractFlushingEventListener. java: 348) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.event.internal.DefaultFlushEventListener.onFlu sh (DefaultFlushEventListener. java: 40) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener (EventListenerGroupImpl. java: 102) ~ [hibernate-core-5.4 .17.Final.jar: 5.4.17.Final] в org.hibernate.internal.SessionImpl.doFlu sh (SessionImpl. java: 1360) ~ [hibernate-core-5.4.17.Final.jar: 5.4 .17.Final] в org.hibernate.internal.SessionImpl.managedFlu sh (SessionImpl. java: 451) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org. hibernate.internal.SessionImpl.flushBeforeTransactionCompletion (SessionImpl. java: 3210) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.internal.SessionImpl.beforeTransactionCompletion (SessionImpl. java: 2378) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.engine.jdb c .internal.JdbcCoordinatorImpl.beforeTransactionCompletion (JdbcCoordinatorImpl. java: 447 ) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.resource.transaction.backend.jdb c .internal.JdbcResourceL ocalTransactionCoordinatorImpl.beforeCompletionCallback (JdbcResourceLocalTransactionCoordinatorImpl. java: 183) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.resource.transaction.backend.jdb * .internal * .internal * .internal * .internal *. JdbcResourceLocalTransactionCoordinatorImpl.access $ 300 (JdbcResourceLocalTransactionCoordinatorImpl. java: 40) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.resource.transaction.backend90.jdb * .internal 10 .JdbcResourceLocalTransactionCoordinatorImpl $ TransactionDriverControlImpl.commit (JdbcResourceLocalTransactionCoordinatorImpl. java: 281) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] в org.hibernate.engine.transaction TransactionImpl. java: 101) ~ [hibernate-core-5.4.17.Final.jar: 5.4.17.Final] ... 22 общих кадра пропущены Причина: java .lang.NullPointerException: null в com. Alex.Validations.EmailValidator.isValid (EmailValidator. java: 26) ~ [classes /: na] в com.Alex.Validations.EmailValidator.isValid (EmailValid ator. java: 1) ~ [классы /: na] в org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint (ConstraintTree. java: 180) ~ [hibernate-validator-6.1.5. Final.jar: 6.1.5.Final]
Класс UserService
@Service
public class UserService {
@Autowired
private UserRepository userRep;
public void addUser(User user) {
userRep.save(user);
}
public void deleteUser(long userId) {
userRep.deleteById(userId);
}
public List<User> retrieveAllUsers(){
Iterable<User>temp =userRep.findAll();
List<User>allUsers = null;
temp.forEach(allUsers::add);
return allUsers;
}
public boolean searchByEmail(String email) {
return userRep.findByEmail(email);
}
public void updateUser(User user) {
userRep.save(user);
}
}
Класс интерфейса аннотации
@Target(ElementType.FIELD)
//When will the annotation be processed compilation, runtime etc
@Retention(RetentionPolicy.RUNTIME)
//Where is the logic
@Constraint(validatedBy = EmailValidator.class)
@Documented
public @interface ValidEmail {
//Error message
String message() default "Invalid email";
//Required for annotation
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Logi аннотаций c класс
public class EmailValidator implements ConstraintValidator<ValidEmail, String> {
@Autowired
private UserService service;
//Actual place to place the logic to check if the data is valid or not
@Override
public boolean isValid(String email, ConstraintValidatorContext context) {
if (email == null) {
return false;
}
List<User> users = service.retrieveAllUsers();
if (users.size() > 0) {
return Pattern.matches("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])", email)
&& service.searchByEmail(email);
}
else {
return Pattern.matches("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])", email);
}
}
@Override
public void initialize(ValidEmail validEmail) {
validEmail.message();
}
}
Основной
@SpringBootApplication
@ComponentScan(basePackages = {
"com.Alex.Mains", "com.Alex.UserPackage", "com.Alex.Flights", "com.Alex.Security"
})
@EntityScan( basePackages = {"com.Alex.UserPackage", "com.Alex.Flights"})
@EnableJpaRepositories({"com.Alex.UserPackage", "com.Alex.Flights"})
public class JpaApplication {
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class, args);
}
// @Bean
// public Validator validator(final AutowireCapableBeanFactory beanFactory) {
//
// ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
// .configure()
// .constraintValidatorFactory(new SpringConstraintValidatorFactory(beanFactory))
// .buildValidatorFactory();
//
// return validatorFactory.getValidator();
// }
}
введите описание изображения здесь