java.lang.IllegalAccessException - не может получить доступ к члену класса org.springframework.data.jpa.util.HibernateProxyDetector с модификаторами "" - PullRequest
0 голосов
/ 07 декабря 2018

Приложение 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;
}

1 Ответ

0 голосов
/ 07 января 2019

У меня возникла эта проблема из-за следующего конфликта:

  1. Apache James использует OpenJPA 2.4.2 в качестве поставщика постоянства.
  2. Но в моем коде я использовал Hibernateкак поставщик сохраняемости.
  3. Мы пытались использовать Spring-Data-JPA, тогда как Джеймс не использует Spring Data.

Следовательно, были конфликты.Чтобы решить эту проблему, мы расширили ту же конфигурацию / реализацию OpenJPA, чтобы применить к данным, которые мы сохраняли, и использовали тот же модуль сохраняемости, который использовал Джеймс, и это решило нашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...