Приложение JPA Basic Spring Data (НЕ приложение Spring BOOT).Кто-нибудь знает, что может быть причиной этой проблемы: Ошибка:
at org.springframework.beans.factory.annotation.
InitDestroyAnnotationBeanPostProcessor$LifecycleElement
.invoke(InitDestroyAnnotationBeanPostProcessor.java:344)
at org.springframework.beans.factory
.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.
invokeInitMethods
(InitDestroyAnnotationBeanPostProcessor.java:295)
at org.springframework.beans.factory.
annotation.InitDestroyAnnotationBeanPostProcessor.
postProcessBeforeInitialization
(InitDestroyAnnotationBeanPostProcessor.java:130)
... 16 more
Caused by: java.lang.IllegalArgumentException:
Cannot instantiate factory class:
org.springframework.data.util.ProxyUtils$ProxyDetector
at org.springframework.core.io.
support.SpringFactoriesLoader.instantiateFactory
(SpringFactoriesLoader.java:117)
at org.springframework.core.io.support.
SpringFactoriesLoader.loadFactories
(SpringFactoriesLoader.java:80)
at org.springframework.data.util.ProxyUtils.
<clinit>(ProxyUtils.java:40)
... 49 more
Caused by: java.lang.IllegalAccessException: Class
org.springframework.core.io.support.SpringFactoriesLoader
can not access a member of class
org.springframework.data.jpa.util.HibernateProxyDetector with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
at java.lang.Class.newInstance(Class.java:436)
at org.springframework.core.io.support.
SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:114)
Вот соответствующие подробности:
pom.xml (Только использование зависимостей загрузчика-стартера для простоты использованияИз-за проблемы интеграции с Apache James, это не приложение для весенней загрузки)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Конфигурация:
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean lfb = new
LocalContainerEntityManagerFactoryBean();
lfb.setDataSource(dataSource());
lfb.setPersistenceProviderClass
(org.hibernate.jpa.HibernatePersistenceProvider.class);
lfb.setPackagesToScan("com.######.######.model");
lfb.setJpaProperties(hibernateProps());
return lfb;
}
Properties hibernateProps() {
Properties properties = new Properties();
properties.setProperty("hibernate.dialect",
"org.hibernate.dialect.MySQL5InnoDBDialect");
properties.setProperty("hibernate.show_sql","true");
return properties;
}
@Bean
JpaTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
entityManagerFactory().getObject());
return transactionManager;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://mysql-james:3306/mailv2?
autoReconnect=true");
dataSource.setUsername("######");
dataSource.setPassword("########");
return dataSource;
}
Репозиторий:
@Repository
public interface BlockedEmailRepository extends
CrudRepository<BlockedEmail, Long> {
List<BlockedEmail> findByUsernameAndEmailId(String username, String
emailId);
}
Объект:
@Data
@Entity
@Table(name="BLOCKED_EMAIL")
public class BlockedEmail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private long id;
@NotNull
@Column(name = "EMAIL_ID")
private String emailId;
@NotNull
@Column(name = "USER_NAME")
private String username;
}