Uso Spring boot + JPA y tengo un problema al iniciar el servicio.
Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.nervytech.dialer.domain.PhoneSettings
at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:219)
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68)
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:89)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:69)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:177)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
Aquí está el archivo Application.java,
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@SpringBootApplication
public class DialerApplication {
public static void main(String[] args) {
SpringApplication.run(DialerApplication.class, args);
}
}
Uso UCp para la agrupación de conexiones y la configuración de DataSource está a continuación,
@Configuration
@ComponentScan
@EnableTransactionManagement
@EnableAutoConfiguration
@EnableJpaRepositories(entityManagerFactoryRef = "dialerEntityManagerFactory", transactionManagerRef = "dialerTransactionManager", basePackages = { "com.nervy.dialer.spring.jpa.repository" })
public class ApplicationDataSource {
/** The Constant LOGGER. */
private static final Logger LOGGER = LoggerFactory
.getLogger(ApplicationDataSource.class);
/** The Constant TEST_SQL. */
private static final String TEST_SQL = "select 1 from dual";
/** The pooled data source. */
private PoolDataSource pooledDataSource;
UserDetailsService Implementation,
@Service("userDetailsService")
@SessionAttributes("user")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
Implementación de la capa de servicio,
@Service
public class PhoneSettingsServiceImpl implements PhoneSettingsService {
}
La clase de repositorio,
@Repository
public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> {
}
Clase de entidad,
@Entity
@Table(name = "phone_settings", catalog = "dialer")
public class PhoneSettings implements java.io.Serializable {
Clase WebSecurityConfig,
@Configuration
@EnableWebMvcSecurity
@ComponentScan
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
/**
* Instantiates a new web security config.
*/
public WebSecurityConfig() {
super();
}
/**
* {@inheritDoc}
* @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(org.springframework.security.config.annotation.web.builders.HttpSecurity)
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login", "/logoffUser", "/sessionExpired", "/error", "/unauth", "/redirect", "*support*").permitAll()
.anyRequest().authenticated().and().rememberMe().and().httpBasic()
.and()
.csrf()
.disable().logout().deleteCookies("JSESSIONID").logoutSuccessUrl("/logoff").invalidateHttpSession(true);
}
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
}
Los paquetes son los siguientes,
Application
la clase está encom.nervy.dialer
Datasource
la clase está encom.nervy.dialer.common
- Las clases de entidad están en -
com.nervy.dialer.domain
- Las clases de servicio están en -
com.nervy.dialer.domain.service.impl
- Los controladores están en
com.nervy.dialer.spring.controller
- Las clases de repositorio están en -
com.nervy.dialer.spring.jpa.repository
WebSecurityConfig
es en -com.nervy.dialer.spring.security
Gracias
spring
spring-mvc
jpa
spring-boot
spring-data
usuario1578872
fuente
fuente
Respuestas:
Creo que reemplazar
@ComponentScan
con@ComponentScan("com.nervy.dialer.domain")
funcionará.Editar:
He agregado una aplicación de muestra para demostrar cómo configurar una conexión de fuente de datos agrupada con BoneCP.
La aplicación tiene la misma estructura que la tuya. Espero que esto te ayude a resolver tus problemas de configuración
fuente
Configure la ubicación de las entidades utilizando @EntityScan en la clase de punto de entrada Spring Boot.
Actualización en septiembre de 2016 : para Spring Boot 1.4+:
use en
org.springframework.boot.autoconfigure.domain.EntityScan
lugar de
org.springframework.boot.orm.jpa.EntityScan
, ya que ... boot.orm.jpa.EntityScan está en desuso a partir de Spring Boot 1.4fuente
Intente agregar todo lo siguiente, en mi aplicación funciona bien con tomcat
Estoy usando Spring Boot, y cuando estoy usando Tomcat incrustado funcionaba bien,
@EntityScan("my.package.base.*")
pero cuando traté de implementar la aplicación en un Tomcat externo recibí unnot a managed type
error para mi entidad.fuente
En mi caso, el problema se debió a mi olvido de haber anotado mis clases de Entidad con
@javax.persistence.Entity
anotaciones. Doh!fuente
@Entity
anotación. Configuré un proyecto de muestra aquí: github.com/mate0021/two_datasources.gitSi ha copiado y pegado la configuración de persistencia de otro proyecto, debe configurar el paquete en EntityManagerFactory manualmente:
fuente
Puedes usar @EntityScan anotación y proporcionar su paquete de entidad para escanear todas sus entidades jpa. Puede usar esta anotación en su clase de aplicación base donde ha usado la anotación @SpringBootApplication.
por ejemplo, @EntityScan ("com.test.springboot.demo.entity")
fuente
nunca olvides agregar @Entity en la clase de dominio
fuente
Recibí este error porque escribí estúpidamente
Una breve explicación: por lo general, se crea una clase FooBarRepository para administrar objetos FooBar (a menudo representando datos en una tabla llamada algo así como foo_bar). Al extender CrudRepository para crear la clase de repositorio especializado, se necesita especificar el tipo que se está administrando, en este caso, FooBar. Sin embargo, lo que escribí por error fue FooBarRepository en lugar de FooBar. FooBarRepository no es el tipo (la clase) que estoy tratando de administrar con FooBarRepository. Por lo tanto, el compilador emite este error.
Destaqué la parte equivocada de escribir en negrita . Eliminar la palabra resaltada Repositorio en mi ejemplo y el código se compila.
fuente
Pon esto en tu
Application.java
archivofuente
O perdió @Entity en la definición de clase o tiene una ruta de exploración de componentes explícita y esta ruta no contiene su clase
fuente
Estoy usando Spring Boot 2.0 y lo arreglé reemplazando @ComponentScan con
@EntityScan
fuente
Tuve este mismo problema, pero solo cuando ejecuté casos de pruebas de arranque de primavera que requerían JPA. El resultado final fue que nuestra propia configuración de prueba jpa estaba inicializando un EntityManagerFactory y configurando los paquetes para escanear. Evidentemente, esto anulará los parámetros de EntityScan si lo configura manualmente.
Es importante tener en cuenta: si todavía está atascado, debe establecer un punto de interrupción
org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
en elsetPackagesToScan()
método y observar dónde se llama y qué paquetes se le pasan.fuente
Tuve algunos problemas al migrar desde Spring boot 1.3.xa 1.5, lo hice funcionar después de actualizar el paquete de entidad en EntityManagerFactory bean
Este bean se refiere en la clase de aplicación a continuación
fuente
Tengo el mismo problema, en la versión spring boot v1.3.x lo que hice fue actualizar spring boot a la versión 1.5.7. Entonces el problema desapareció.
fuente
Tuve este problema porque no asigné todas las entidades en el archivo orm.xml
fuente
A continuación funcionó para mí ...
}
fuente
He movido mi clase de aplicación al paquete principal como:
Clase principal: com.job.application
Entidad: com.job.application.entity
De esta manera no tiene que agregar @EntityScan
fuente