我使用Spring boot + JPA,启动服务时遇到问题。
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)
这是Application.java文件,
@Configuration @ComponentScan @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class }) @SpringBootApplication public class DialerApplication { public static void main(String[] args) { SpringApplication.run(DialerApplication.class, args); } }
我使用UCp进行连接池,下面是DataSource配置,
@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;
Service layer implementation,
@Service public class PhoneSettingsServiceImpl implements PhoneSettingsService { }
The repository class,
@Repository
@Repository public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> { }
Entity class,
@Entity @Table(name = "phone_settings", catalog = "dialer") public class PhoneSettings implements java.io.Serializable {
WebSecurityConfig class,
@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()); } }
软件包如下,
com.nervy.dialer
com.nervy.dialer.common
com.nervy.dialer.domain
com.nervy.dialer.domain.service.impl
com.nervy.dialer.spring.controller
com.nervy.dialer.spring.jpa.repository
com.nervy.dialer.spring.security
谢谢
尝试添加以下所有内容,在我的应用程序中,它与tomcat正常工作
@EnableJpaRepositories("my.package.base.*") @ComponentScan(basePackages = { "my.package.base.*" }) @EntityScan("my.package.base.*")
我使用的是Spring Boot,当我使用嵌入式tomcat时,它工作得很好, @EntityScan("my.package.base.*")但是当我尝试将应用程序部署到外部tomcat时not a managed type,我的实体出现错误。
@EntityScan("my.package.base.*")
not a managed type
对于Spring Boot 1.4+: 使用org.springframework.boot.autoconfigure.domain.EntityScan 代替org.springframework.boot.orm.jpa.EntityScan,因为... boot.orm.jpa.EntityScan 从Spring Boot 1.4开始不推荐使用
org.springframework.boot.autoconfigure.domain.EntityScan
org.springframework.boot.orm.jpa.EntityScan
... boot.orm.jpa.EntityScan