Saya menggunakan Spring boot + JPA dan mengalami masalah saat memulai layanan.
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)
Ini adalah file Application.java,
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@SpringBootApplication
public class DialerApplication {
public static void main(String[] args) {
SpringApplication.run(DialerApplication.class, args);
}
}
Saya menggunakan UCp untuk pooling koneksi dan konfigurasi DataSource di bawah ini,
@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;
Implementasi UserDetailsService,
@Service("userDetailsService")
@SessionAttributes("user")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
Implementasi lapisan layanan,
@Service
public class PhoneSettingsServiceImpl implements PhoneSettingsService {
}
Kelas repositori,
@Repository
public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> {
}
Kelas entitas,
@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());
}
}
Paket-paket tersebut adalah sebagai berikut,
Application
kelas ada di -com.nervy.dialer
Datasource
kelas ada di -com.nervy.dialer.common
- Kelas entitas ada di -
com.nervy.dialer.domain
- Kelas layanan ada di -
com.nervy.dialer.domain.service.impl
- Pengendali ada di -
com.nervy.dialer.spring.controller
- Kelas-kelas repositori ada di -
com.nervy.dialer.spring.jpa.repository
WebSecurityConfig
ada di -com.nervy.dialer.spring.security
Terima kasih
spring
spring-mvc
jpa
spring-boot
spring-data
pengguna1578872
sumber
sumber
Jawaban:
Saya pikir mengganti
@ComponentScan
dengan@ComponentScan("com.nervy.dialer.domain")
akan berhasil.Edit:
Saya telah menambahkan contoh aplikasi untuk menunjukkan cara mengatur koneksi sumber data yang dikumpulkan dengan BoneCP.
Aplikasi ini memiliki struktur yang sama dengan Anda. Saya harap ini akan membantu Anda untuk menyelesaikan masalah konfigurasi Anda
sumber
Konfigurasikan lokasi entitas menggunakan @EntityScan di kelas titik masuk Boot Musim Semi.
Pembaruan pada September 2016 : Untuk Spring Boot 1.4+:
gunakan
org.springframework.boot.autoconfigure.domain.EntityScan
alih-alih
org.springframework.boot.orm.jpa.EntityScan
, karena ... boot.orm.jpa.EntityScan sudah tidak digunakan lagi pada Spring Boot 1.4sumber
Coba tambahkan Semua yang berikut, Dalam aplikasi saya berfungsi dengan baik dengan kucing jantan
Saya menggunakan spring boot, dan ketika saya menggunakan tomcat yang disematkan itu berfungsi dengan baik
@EntityScan("my.package.base.*")
tetapi ketika saya mencoba untuk menyebarkan aplikasi ke tomcat eksternal saya mendapatnot a managed type
kesalahan untuk entitas saya.sumber
Dalam kasus saya masalahnya adalah karena saya lupa untuk membuat anotasi kelas Entitas saya dengan
@javax.persistence.Entity
anotasi. Doh!sumber
@Entity
anotasi. Saya membuat contoh proyek di sini: github.com/mate0021/two_datasources.gitJika Anda telah menyalin konfigurasi persistensi dari proyek lain, Anda harus mengatur paket di EntityManagerFactory secara manual:
sumber
Anda dapat menggunakan anotasi @EntityScan dan memberikan paket entitas Anda untuk memindai semua entitas jpa Anda. Anda dapat menggunakan anotasi ini di kelas aplikasi dasar di mana Anda menggunakan anotasi @SpringBootApplication.
mis. @EntityScan ("com.test.springboot.demo.entity")
sumber
jangan lupa menambahkan @Entity di kelas domain
sumber
Saya mendapatkan kesalahan ini karena saya menulis dengan bodoh
Penjelasan singkat: Seseorang biasanya membuat kelas FooBarRepository untuk mengelola objek FooBar (sering mewakili data dalam tabel yang disebut sesuatu seperti foo_bar.) Saat memperluas CrudRepository untuk membuat kelas repositori khusus, kita perlu menentukan jenis yang dikelola - di kasus ini, FooBar. Apa yang saya salah ketik adalah FooBarRepository daripada FooBar. FooBarRepository bukan tipe (kelas) yang saya coba kelola dengan FooBarRepository. Oleh karena itu, kompilator mengeluarkan kesalahan ini.
Saya menyoroti sedikit salah mengetik dalam huruf tebal . Hapus Repositori kata yang disorot dalam contoh saya dan kompilasi kode.
sumber
Letakkan ini di
Application.java
file Andasumber
Anda melewatkan @Entity pada definisi kelas atau Anda memiliki jalur pemindaian komponen eksplisit dan jalur ini tidak mengandung kelas Anda
sumber
Saya menggunakan spring boot 2.0 dan saya memperbaikinya dengan mengganti @ComponentScan dengan
@EntityScan
sumber
Saya punya masalah yang sama tetapi hanya ketika menjalankan tes booting musim semi kasus yang diperlukan JPA. Hasil akhirnya adalah bahwa konfigurasi pengujian jpa kita sendiri menginisialisasi EntityManagerFactory dan mengatur paket untuk dipindai. Ini jelas akan menimpa parameter EntityScan jika Anda mengaturnya secara manual.
Penting untuk dicatat: jika Anda masih macet, Anda harus menetapkan titik istirahat pada
org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
padasetPackagesToScan()
metode dan lihat di mana ini dipanggil dan paket apa yang sedang diteruskan ke sana.sumber
Saya punya beberapa masalah saat melakukan migrasi dari boot Spring 1.3.x ke 1.5, saya berhasil setelah memperbarui paket entitas di EntityManagerFactory bean
Kacang ini disebut dalam kelas Aplikasi seperti di bawah ini
sumber
Saya memiliki masalah yang sama, pada versi spring boot v1.3.x yang saya lakukan adalah meng-upgrade spring boot ke versi 1.5.7.RELEASE. Lalu masalahnya hilang.
sumber
Saya mengalami masalah ini karena saya tidak memetakan semua entitas dalam file orm.xml
sumber
Di bawah ini bekerja untuk saya ..
}
sumber
Saya telah memindahkan kelas aplikasi saya ke paket induk seperti:
Kelas utama: com.job.application
Entity: com.job.application.entity
Dengan cara ini Anda tidak perlu menambahkan @EntityScan
sumber