![](/img/trans.png)
[英]java.lang.IllegalArgumentException: Not an managed type: classTestEntity
[英]Problem with java.lang.IllegalArgumentException: Not a managed type
我知道我在問其他用戶之前問過同樣的問題,但我想知道Stack Overflow中是否有任何頁面可以解決我的問題。
我有一個像這樣定義的Database Configuration類:
@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
在Application Configuration類中定義,定義如下:
@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數據庫)
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。 我不知道它是否相關。
也許問題出現是因為你的類cl.claro.berrws.persistence.entities.Estado
的bean沒有被創建。 在DatabaseConfig .class中,您只指定要掃描的包AppConfig.CLASS_REPOSITORIES
,請嘗試添加以下內容:
@ComponentScan("cl.claro.berrws.persistence.entities")
這樣實體類也會在春天被選中。 所以你的配置應該是這樣的:
@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"} )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.