Uso o Spring boot + JPA e estou com um problema ao iniciar o serviço.
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)
Aqui está o arquivo Application.java,
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@SpringBootApplication
public class DialerApplication {
public static void main(String[] args) {
SpringApplication.run(DialerApplication.class, args);
}
}
Eu uso o UCp para o pool de conexões e a configuração do DataSource está abaixo,
@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;
Implementação UserDetailsService,
@Service("userDetailsService")
@SessionAttributes("user")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
Implementação da camada de serviço,
@Service
public class PhoneSettingsServiceImpl implements PhoneSettingsService {
}
A classe do repositório,
@Repository
public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> {
}
Classe de entidade,
@Entity
@Table(name = "phone_settings", catalog = "dialer")
public class PhoneSettings implements java.io.Serializable {
Classe 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());
}
}
Os pacotes são os seguintes,
Application
classe está em -com.nervy.dialer
Datasource
classe está em -com.nervy.dialer.common
- As classes de entidade estão em -
com.nervy.dialer.domain
- As classes de serviço estão em -
com.nervy.dialer.domain.service.impl
- Os controladores estão em -
com.nervy.dialer.spring.controller
- As classes de repositório estão em -
com.nervy.dialer.spring.jpa.repository
WebSecurityConfig
é em -com.nervy.dialer.spring.security
obrigado
spring
spring-mvc
jpa
spring-boot
spring-data
user1578872
fonte
fonte
Respostas:
Eu acho que substituir
@ComponentScan
por@ComponentScan("com.nervy.dialer.domain")
funcionará.Editar:
Adicionei um aplicativo de exemplo para demonstrar como configurar uma conexão de fonte de dados em pool com o BoneCP.
O aplicativo tem a mesma estrutura que a sua. Espero que isso ajude você a resolver seus problemas de configuração
fonte
Configure o local das entidades usando @EntityScan na classe de ponto de entrada do Spring Boot.
Atualização em setembro de 2016 : para o Spring Boot 1.4+:
use em
org.springframework.boot.autoconfigure.domain.EntityScan
vez de
org.springframework.boot.orm.jpa.EntityScan
, como ... boot.orm.jpa.EntityScan está obsoleto a partir do Spring Boot 1.4fonte
Tente adicionar Tudo o seguinte: No meu aplicativo, ele está funcionando bem com o tomcat
Estou usando o boot de primavera e, quando estou usando o tomcat incorporado, ele estava funcionando bem,
@EntityScan("my.package.base.*")
mas quando tentei implantar o aplicativo em um tomcat externo, recebi umnot a managed type
erro para minha entidade.fonte
No meu caso, o problema foi devido ao meu esquecimento de ter anotado minhas classes de entidade com
@javax.persistence.Entity
anotação. Doh!fonte
@Entity
anotação. Eu configurei um projeto de amostra aqui: github.com/mate0021/two_datasources.gitSe você copiou e colou a configuração de persistência de outro projeto, defina o pacote no EntityManagerFactory manualmente:
fonte
Você pode usar @EntityScan anotação e fornecer seu pacote de entidades para verificar todas as suas entidades jpa. Você pode usar esta anotação na classe de aplicativo base em que usou a anotação @SpringBootApplication.
por exemplo, @EntityScan ("com.test.springboot.demo.entity")
fonte
nunca se esqueça de adicionar @Entity na classe de domínio
fonte
Eu recebi esse erro porque escrevi estupidamente
Uma breve explicação: Normalmente, cria-se uma classe FooBarRepository para gerenciar objetos FooBar (geralmente representando dados em uma tabela chamada algo como foo_bar). Ao estender o CrudRepository para criar a classe de repositório especializada, é necessário especificar o tipo que está sendo gerenciado. neste caso, FooBar. O que eu digitei por engano, porém, foi FooBarRepository em vez de FooBar. FooBarRepository não é o tipo (a classe) que estou tentando gerenciar com o FooBarRepository. Portanto, o compilador emite esse erro.
Eu destaquei a parte errada da digitação em negrito . Exclua a palavra destacada Repositório no meu exemplo e o código é compilado.
fonte
Coloque isso no seu
Application.java
arquivofonte
Você perdeu o @Entity na definição de classe ou possui um caminho explícito de verificação de componente e esse caminho não contém sua classe
fonte
Estou usando o spring boot 2.0 e corrigi isso substituindo @ComponentScan por
@EntityScan
fonte
Eu tive esse mesmo problema, mas apenas ao executar casos de testes de inicialização que exigiam JPA. O resultado final foi que nossa própria configuração de teste jpa estava inicializando um EntityManagerFactory e definindo os pacotes para varredura. Evidentemente, isso substituirá os parâmetros do EntityScan se você estiver configurando manualmente.
Importante notar: se você ainda está preso você deve definir um ponto de ruptura no
org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
nosetPackagesToScan()
método e dar uma olhada no que isso está sendo chamado e que pacotes estão sendo passados para ele.fonte
Tive algum problema ao migrar do Spring boot 1.3.x para o 1.5, consegui funcionar depois de atualizar o pacote de entidades no bean EntityManagerFactory
Este bean referido na classe Application como abaixo
fonte
Eu tenho o mesmo problema, na versão spring boot v1.3.x, o que eu fiz foi atualizar o spring boot para a versão 1.5.7.RELEASE. Então o problema se foi.
fonte
Eu tive esse problema porque não mapeei todas as entidades no arquivo orm.xml
fonte
Abaixo funcionou para mim ..
}
fonte
Mudei minha classe de aplicativo para o pacote pai como:
Classe principal: com.job.application
Entidade: com.job.application.entity
Dessa forma, você não precisa adicionar @EntityScan
fonte