use*_*872 100 spring jpa spring-mvc spring-data spring-boot
我使用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)
Run Code Online (Sandbox Code Playgroud)
这是Application.java文件,
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@SpringBootApplication
public class DialerApplication {
public static void main(String[] args) {
SpringApplication.run(DialerApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
我使用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;
Run Code Online (Sandbox Code Playgroud)
UserDetailsService实现,
@Service("userDetailsService")
@SessionAttributes("user")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
Run Code Online (Sandbox Code Playgroud)
服务层实现,
@Service
public class PhoneSettingsServiceImpl implements PhoneSettingsService {
}
Run Code Online (Sandbox Code Playgroud)
存储库类,
@Repository
public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> {
}
Run Code Online (Sandbox Code Playgroud)
实体类,
@Entity
@Table(name = "phone_settings", catalog = "dialer")
public class PhoneSettings implements java.io.Serializable {
Run Code Online (Sandbox Code Playgroud)
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());
}
}
Run Code Online (Sandbox Code Playgroud)
包裹如下,
1) Application class is in - com.nervy.dialer
2) Datasource class is in - com.nervy.dialer.common
3) Entity classes are in - com.nervy.dialer.domain
4) Service classes are in - com.nervy.dialer.domain.service.impl
5) Controllers are in - com.nervy.dialer.spring.controller
6) Repository classes are in - com.nervy.dialer.spring.jpa.repository
7) WebSecurityConfig is in - com.nervy.dialer.spring.security
Run Code Online (Sandbox Code Playgroud)
谢谢
Man*_*ari 95
在Spring Boot入口点类中使用@EntityScan配置实体的位置.
2016年9月更新:对于Spring Boot 1.4+:
使用org.springframework.boot.autoconfigure.domain.EntityScan
而不是org.springframework.boot.orm.jpa.EntityScan,因为... boot.orm.jpa.EntityScan 从Spring Boot 1.4 开始被弃用
Dee*_*pak 77
jpa entity is not a managed type
如果在最新版本的 Sp 中遇到问题,根本原因是:
在最新版本的 Springboot 和 JDK 中,此错误是由于 Java EE 中使用的“Javax”命名空间被替换为 Jakarta EE 中的“Jakarta”命名空间造成的。
使固定
因此,在较新版本的Spring版本和JDK中。例如 Spring 6+ 和 JDK 17+,您现在需要替换javax.persistence.Entitywhen 来jakarta.persistence.Entity解决 jpa entity is not a managed type错误
进一步的背景
@SakshamGupta。根本原因是:
2017年,Oracle(收购了Java EE)决定将Java EE的所有权、维护和未来开发转移给Eclipse基金会。这次转移促成了 Jakarta EE 的创建。
作为此转变的一部分,包命名约定也发生了变化。Java EE 中使用的“Javax”命名空间已替换为 Jakarta EE 中的“Jakarta”命名空间。
因此,较新版本的 Java 和 Spring Boot 采用了 JDK17 和 Spring Boot v3 中的 Jakarta EE。因此,您需要切换到jakarta.persistence.Entity. 此更改反映了从 Java EE 到 Jakarta EE 的转变以及更新的包命名约定。
这是附加材料:
man*_*noj 66
尝试添加以下所有内容,在我的应用程序中,它与tomcat一起正常工作
@EnableJpaRepositories("my.package.base.*")
@ComponentScan(basePackages = { "my.package.base.*" })
@EntityScan("my.package.base.*")
Run Code Online (Sandbox Code Playgroud)
我使用的春天开机,而当我使用嵌入的Tomcat,它正在罚款了 @EntityScan("my.package.base.*"),但是当我试图将应用程序部署到外部的Tomcat我得到了not a managed type错误我的实体.
Far*_*jmi 23
在我的情况下,问题是由于我忘记用@ javax.persistence.Entity注释注释我的实体类.卫生署!
//The class reported as "not a amanaged type"
@javax.persistence.Entity
public class MyEntityClass extends my.base.EntityClass {
....
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*rvo 20
我收到这个错误是因为我愚蠢地写了
公共接口 FooBarRepository 扩展 CrudRepository<FooBar Repository , Long> { ...
简要说明:通常会创建一个 FooBarRepository 类来管理 FooBar 对象(通常表示一个名为 foo_bar 之类的表中的数据。)当扩展 CrudRepository 以创建专门的存储库类时,需要指定正在管理的类型——在在这种情况下,FooBar。然而,我错误地输入的是 FooBarRepository 而不是 FooBar。FooBarRepository 不是我试图用 FooBarRepository 管理的类型(类)。因此,编译器会发出此错误。
我用粗体突出显示了错误的输入。删除我的示例中突出显示的单词 Repository 并编译代码。
Nit*_*ena 16
您可以使用@EntityScan注释并提供实体包以扫描所有jpa实体.您可以在已使用@SpringBootApplication批注的基础应用程序类上使用此批注.
例如 @EntityScan("com.test.springboot.demo.entity")
Laz*_*uss 13
如果您已从另一个项目复制粘贴了持久性配置,则必须在EntityManagerFactory中手动设置包:
@Bean
public EntityManagerFactory entityManagerFactory() throws PropertyVetoException {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setPackagesToScan("!!!!!!misspelled.package.path.to.entities!!!!!");
....
}
Run Code Online (Sandbox Code Playgroud)
小智 12
把它放在你的Application.java文件中
@ComponentScan(basePackages={"com.nervy.dialer"})
@EntityScan(basePackages="domain")
Run Code Online (Sandbox Code Playgroud)
我知道@EntityScan之前已经回答过:
但我觉得我需要强调的是,在处理多模块 Maven 项目时,这个问题可能经常发生。
就我而言,我有一个多模块 Maven 项目,其中一个模块是model包,其他模块是microservices. 就我而言,当我运行一个使用model package(在我的项目中调用的域)中定义的类的微服务时,我必须将@EntityScan(basePackages = {"com.example.domain"})注释添加到@SpringBootApplication class:
@SpringBootApplication
@EnableEurekaClient
@EntityScan(basePackages = {"com.example.domain"}) // add this so the spring boot context knows where to look for entities
public class DoctorServiceApplication {
public static void main(String[] args) {
SpringApplication.run(DoctorServiceApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
就我而言,我错误地使用存储库类而不是实体类作为 JpaRepository 参数。像这样:
@Repository
public interface BuyerInspectionRepository extends JpaRepository<BuyerInspectionRepository,Long> {
}
Run Code Online (Sandbox Code Playgroud)
所以我用实体类替换了存储库类。这就是买方检验。
@Repository
public interface BuyerInspectionRepository extends JpaRepository<BuyerInspection,Long> {
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
187250 次 |
| 最近记录: |