Проблема с java.lang.IllegalArgumentException: не управляемый тип - PullRequest
0 голосов
/ 19 июня 2019

Я знаю, что задаю тот же вопрос, который задавали ранее другие пользователи, но я хочу знать, есть ли какая-либо страница в переполнении стека, которая решает мою проблему.

У меня есть класс конфигурации базы данных, определенный какthis:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {AppConfig.CLASS_REPOSITORIES})
public class DatabaseConfig {

    private static final Logger LOG = Log.getLog(AppConfig.class);

    @Autowired
    AppConfig config;

    //Bean methods
}

Константа AppConfig.CLASS_REPOSITORIES определена в классе конфигурации приложения, определенном следующим образом:

@Configuration
@ComponentScan({AppConfig.CLASS_SERVICES,AppConfig.CLASS_WEB, AppConfig.CLASS_WEBCORE}) 
@Import({DatabaseConfig.class, WebConfig.class, DBIccidsConfig.class, DBOabiConfig.class})
public class AppConfig  {
    private static final Logger LOG = Log.getLog(AppConfig.class);
    /**************************************************/

    /**************************************************/
    public static final  String CONS_APP_CONFIG      =  Constants.NAME.toUpperCase();    
    public static final  String CLASS_SERVICES       = "cl.claro.berrws.business.services";
    public static final  String CLASS_WEB            = "cl.claro.berrws.soap.controllers";
    public static final  String CLASS_WEBCORE        = "cl.claro.berrws.soap.core";
    public static final  String CLASS_REPOSITORIES   = "cl.claro.berrws.persistence.repositories";
    public static final  String CLASS_ENTITIES       = "cl.claro.berrws.persistence.entities";
    public static final  String CLASS_ICCIDS_REPOSITORIES   = "cl.claro.berrws.persistence.iccids.repositories";
    public static final  String CLASS_ICCIDS_ENTITIES       = "cl.claro.berrws.persistence.iccids.entities";   
    public static final  String CLASS_OABI_REPOSITORIES   = "cl.claro.berrws.persistence.imeioabi.repositories";
    public static final  String CLASS_OABI_ENTITIES       = "cl.claro.berrws.persistence.imeioabi.entities";   

//Bean methods that are not relevant for this problem

Константа CLASS_REPOSITORIES указывает на пакет cl.claro.berrws.persistence.iccids.repositories, содержащийдва интерфейса репозитория.Одним из них является EstadoRepository, определяемый следующим образом:

package cl.claro.berrws.persistence.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import cl.claro.berrws.persistence.entities.Estado;

@Repository
public interface EstadoRepository extends JpaRepository<Estado, String>{
    @Query("SELECT e FROM Estado e WHERE e.imei=:imei")
    public Estado obtieneEstado(@Param("imei") String imei);
}

Класс Estado существует в пакете cl.claro.berrws.persistence.entities, на который ссылается константа CLASS_ENTITIES в классе AppConfig.Класс Estado определяется следующим образом:

@Data
@Entity
@Table(name = "TBL_ESTADOS")
@XmlRootElement
public class Estado implements Serializable {
    //Some attributes
    @Id
    @Column(name = "IMEI", length=20)
    @Basic(optional = false)
    private String imei;

    //More attributes
}

Порядок атрибутов устанавливается в базе данных (Oracle Database)

Класс DatabaseConfig определяет методы Bean, которыеиспользует классы сущностей следующим образом:

@Bean
    LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, Environment env) {
        if (LOG.isInfoEnabled()) LOG.info("Configurando ENTITY MANAGER");
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource);
        entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        entityManagerFactoryBean.setPackagesToScan(AppConfig.CLASS_ENTITIES);
        Properties jpaProperties = new Properties();
        jpaProperties.put("hibernate.dialect",Config.getConfig("hibernate.dialect"));        
        jpaProperties.put("hibernate.show_sql",Config.getConfig("hibernate.showSql"));
        jpaProperties.put("hibernate.format_sql",Config.getConfig("hibernate.format_sql")); 
        jpaProperties.put("hibernate.hbm2ddl.auto",Config.getConfig("hibernate.hbm2ddl")); 
        jpaProperties.put("hibernate.enable_lazy_load_no_trans",true); 
        entityManagerFactoryBean.setJpaProperties(jpaProperties);        
        return entityManagerFactoryBean;
    }    

Тем не менее, когда я выполняю свое приложение, я получаю следующее исключение: java.lang.IllegalArgumentException: Not a managed type: class cl.claro.berrws.persistence.entities.Estado

Я что-то пропустил?Заранее спасибо, ребята.

PD: Приложение также использует Maven.Я не знаю, имеет ли это отношение.

1 Ответ

0 голосов
/ 19 июня 2019

Возможно, проблема возникает из-за того, что компонент для вашего класса cl.claro.berrws.persistence.entities.Estado не создается.В вашем DatabaseConfig .class вы указываете только пакет AppConfig.CLASS_REPOSITORIES для сканирования, поэтому попробуйте добавить следующее:

@ComponentScan("cl.claro.berrws.persistence.entities")

, чтобы классы сущностей также были подобраны Spring.Таким образом, ваша конфигурация должна выглядеть следующим образом:

@Configuration
@EnableTransactionManagement
@ComponentScan("cl.claro.berrws.persistence.entities")
@EnableJpaRepositories(basePackages = {AppConfig.CLASS_REPOSITORIES})
public class DatabaseConfig {

    private static final Logger LOG = Log.getLog(AppConfig.class);

    @Autowired
    AppConfig config;

    //Bean methods
}

или вы можете попытаться указать пакет класса сущности с помощью аннотации @EntityScan, например:

@EntityScan( basePackages = {"domain"} )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...