Я использую 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 для пула соединений, а конфигурация источника данных приведена ниже,
@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,
@Service("userDetailsService")
@SessionAttributes("user")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
Реализация сервисного уровня,
@Service
public class PhoneSettingsServiceImpl implements PhoneSettingsService {
}
Класс репозитория,
@Repository
public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> {
}
Класс сущности,
@Entity
@Table(name = "phone_settings", catalog = "dialer")
public class PhoneSettings implements java.io.Serializable {
Класс 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());
}
}
Пакеты следующие:
Application
класс в -com.nervy.dialer
Datasource
класс в -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
WebSecurityConfig
в -com.nervy.dialer.spring.security
Спасибо
spring
spring-mvc
jpa
spring-boot
spring-data
user1578872
источник
источник
Ответы:
Думаю, замена
@ComponentScan
на@ComponentScan("com.nervy.dialer.domain")
сработает.Редактировать :
Я добавил образец приложения, чтобы продемонстрировать, как настроить соединение с источником данных из пула с BoneCP.
Приложение имеет ту же структуру, что и ваше. Надеюсь, это поможет вам решить проблемы с конфигурацией
источник
Настройте расположение сущностей с помощью @EntityScan в классе точки входа Spring Boot.
Обновление от сентября 2016 г . : для Spring Boot 1.4+:
используйте
org.springframework.boot.autoconfigure.domain.EntityScan
вместо
org.springframework.boot.orm.jpa.EntityScan
, как ... boot.orm.jpa.EntityScan устарел с Spring Boot 1.4источник
Попробуйте добавить все следующее: в моем приложении он отлично работает с tomcat
Я использую весеннюю загрузку, и когда я использую встроенный tomcat, он отлично работал,
@EntityScan("my.package.base.*")
но когда я попытался развернуть приложение на внешнем tomcat, у меня возниклаnot a managed type
ошибка для моей сущности.источник
В моем случае проблема была связана с тем, что я забыл аннотировать свои классы Entity
@javax.persistence.Entity
аннотациями. Doh!источник
@Entity
аннотации. Я создал образец проекта здесь: github.com/mate0021/two_datasources.gitЕсли вы скопировали конфигурацию сохраняемости из другого проекта, вы должны вручную установить пакет в EntityManagerFactory :
источник
Вы можете использовать @EntityScan аннотацию и предоставить свой пакет сущностей для сканирования всех ваших сущностей jpa. Вы можете использовать эту аннотацию в своем базовом классе приложения, где вы использовали аннотацию @SpringBootApplication.
например, @EntityScan ("com.test.springboot.demo.entity")
источник
никогда не забывайте добавлять @Entity в доменный класс
источник
Получил эту ошибку потому что тупо написал
Краткое объяснение: обычно создается класс FooBarRepository для управления объектами FooBar (часто представляющими данные в таблице, называемой чем-то вроде foo_bar.) При расширении CrudRepository для создания специализированного класса репозитория необходимо указать управляемый тип - в в данном случае FooBar. Однако я по ошибке набрал FooBarRepository, а не FooBar. FooBarRepository - это не тот тип (класс), которым я пытаюсь управлять с помощью FooBarRepository. Поэтому компилятор выдает эту ошибку.
Я выделил жирным шрифтом ошибочный набор текста . Удалите выделенное слово Repository в моем примере, и код компилируется.
источник
Поместите это в свой
Application.java
файлисточник
Вы либо пропустили @Entity в определении класса, либо у вас есть явный путь сканирования компонентов, и этот путь не содержит ваш класс
источник
Я использую Spring boot 2.0 и исправил это, заменив @ComponentScan на
@EntityScan
источник
У меня была такая же проблема, но только при запуске тестов весенней загрузки, для которых требовался JPA. Конечным результатом было то, что наша собственная тестовая конфигурация jpa инициализировала EntityManagerFactory и настраивала пакеты для сканирования. Очевидно, это переопределит параметры EntityScan, если вы устанавливаете их вручную.
Важно отметить: если вы все еще застряли, вам следует установить точку
org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
останова вsetPackagesToScan()
методе on и посмотреть, где он вызывается и какие пакеты ему передаются.источник
У меня возникла проблема при переходе с Spring boot 1.3.x на 1.5, он заработал после обновления пакета сущностей в bean-компоненте EntityManagerFactory.
Этот bean-компонент упоминается в классе Application, как показано ниже.
источник
У меня та же проблема, в версии Spring boot v1.3.x я обновил Spring Boot до версии 1.5.7.RELEASE. Тогда проблема исчезла.
источник
У меня была эта проблема, потому что я не сопоставил все объекты в файле orm.xml
источник
Ниже работал у меня ..
}
источник
Я переместил свой класс приложения в родительский пакет, например:
Основной класс: com.job.application
Сущность: com.job.application.entity
Таким образом, вам не нужно добавлять @EntityScan
источник