【发布时间】:2018-05-11 02:07:33
【问题描述】:
即使我在 stackOverFlow 上找到了重复的解决方案,我也遇到了异常
Caused by: java.lang.IllegalArgumentException: Not a managed type: class org.homepingo.model.Userprofile
我正在使用 spring boot(1.4.5) 并且我正在尝试将 userprofile 对象保存在用户配置文件表中。
配置文件:
package org.homepingo.endpoint;
import java.util.Properties;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
@Configuration
@PropertySource({"homepingo-datasource.properties","homepingo-endpoint.properties"})
@EnableJpaRepositories(basePackages={"org.homepingo.dao"})
@EntityScan(basePackages = { "org.homepingo.model" })
@EnableTransactionManagement
@EnableAutoConfiguration
@ComponentScan("org.homepingo")
//@ImportResource({"classpath*:**/springcontext-web-api.xml","classpath*:**/smartdata-sqs-context.xml"})
public class RepositoryConfig {
@Autowired
private Environment environment;
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getProperty("homepingo.datasource.driverClass"));
dataSource.setUrl(environment.getProperty("homepingo.datasource.url"));
dataSource.setUsername(environment.getProperty("homepingo.datasource.username"));
dataSource.setPassword(environment.getProperty("homepingo.datasource.password"));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
entityManagerFactory.setDataSource(dataSource());
entityManagerFactory.setPackagesToScan(new String[] { "com.homepingo.model" });
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.getJpaPropertyMap().put("database", "MYSQL");
vendorAdapter.getJpaPropertyMap().put("databasePlatform",
environment.getProperty("homepingo.datasource.hibernate.dialect"));
entityManagerFactory.setJpaVendorAdapter(vendorAdapter);
entityManagerFactory.setJpaProperties(loadPersistenceEngineProperties());
return entityManagerFactory;
}
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
return transactionManager;
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
Properties loadPersistenceEngineProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "validate");
// properties.setProperty("hibernate.hbm2ddl.auto", "create");
properties.setProperty("hibernate.dialect",
environment.getProperty("homepingo.datasource.hibernate.dialect"));
properties.setProperty("hibernate.cache.use_second_level_cache",
environment.getProperty("homepingo.datasource.hibernate.cache.use_second_level_cache"));
properties.setProperty("hibernate.cache.region.factory_class",
"org.hibernate.cache.ehcache.EhCacheRegionFactory");
properties.setProperty("hibernate.cache.use_query_cache",
environment.getProperty("homepingo.datasource.hibernate.cache.use_query_cache"));
properties.setProperty("hibernate.show_sql",
environment.getProperty("homepingo.datasource.hibernate.show_sql"));
return properties;
}
}
Spring应用主类:
package org.homepingo.endpoint;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class SpringBootWebApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringBootWebApplication.class, args);
}
}
道接口:
package org.homepingo.dao;
import org.homepingo.model.Posttype;
import org.homepingo.model.Userprofile;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
public interface UserProfileRepository extends JpaRepository<Userprofile, Long>{
}
实体类:
package org.homepingo.model;
import java.io.Serializable;
import javax.persistence.*;
/**
* The persistent class for the userprofile database table.
*
*/
@Entity
//@NamedQuery(name="Userprofile.findAll", query="SELECT u FROM Userprofile u")
@Table(name = "userprofile")
public class Userprofile{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="user_profile_id")
private Long userProfileId;
@Column(name="email")
private String email;
@Column(name="first_name")
private String firstName;
@Column(name="isNumberVisible")
private byte isNumberVisible;
@Column(name="last_name")
private String lastName;
@Column(name="phone")
private int phone;
@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinColumn(name = "search_view_id", referencedColumnName = "search_view_id")
private Searchview searchview;
@OneToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
private AuthUser authUser;
@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinColumn(name = "user_type_id", referencedColumnName = "user_type_id")
private Usertype usertype;
public Long getUserProfileId() {
return this.userProfileId;
}
public void setUserProfileId(Long userProfileId) {
this.userProfileId = userProfileId;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(name="first_name")
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public byte getIsNumberVisible() {
return this.isNumberVisible;
}
public void setIsNumberVisible(byte isNumberVisible) {
this.isNumberVisible = isNumberVisible;
}
@Column(name="last_name")
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getPhone() {
return this.phone;
}
public void setPhone(int phone) {
this.phone = phone;
}
//bi-directional many-to-one association to Searchview
@ManyToOne
@JoinColumn(name="Search_view_id")
public Searchview getSearchview() {
return this.searchview;
}
public void setSearchview(Searchview searchview) {
this.searchview = searchview;
}
//bi-directional many-to-one association to AuthUser
@ManyToOne
@JoinColumn(name="user_id")
public AuthUser getAuthUser() {
return this.authUser;
}
public void setAuthUser(AuthUser authUser) {
this.authUser = authUser;
}
//bi-directional many-to-one association to Usertype
@ManyToOne
@JoinColumn(name="user_type_Id")
public Usertype getUsertype() {
return this.usertype;
}
public void setUsertype(Usertype usertype) {
this.usertype = usertype;
}
}
服务类:
package org.homepingo.service.Impl;
import org.homepingo.dao.UserProfileRepository;
import org.homepingo.model.Posttype;
import org.homepingo.model.Userprofile;
import org.homepingo.service.UserProfileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("userProfileService")
public class UserProfileServiceImpl implements UserProfileService{
@Autowired
UserProfileRepository userProfileRepository;
@Override
public Userprofile processProfileToPost(Userprofile userprofile) throws Exception {
userProfileRepository.save(userprofile);
return userprofile;
}
}
从过去 5 天开始,即使我遵循了在互联网上找到的所有可能的解决方案,但都没有奏效,但我仍然遇到此异常。谁能告诉我这段代码我做错了什么?
【问题讨论】:
-
您是否尝试更改表和实体名称?在某些数据库中,UserProfle 是保留字。您是否还检查了您的关系(AuthUser、SearchView 和 UseType)是否正确标记为 @Entity?
-
@JoséMendes 我尝试了这两个选项,但仍然无法正常工作
-
@JoséMendes 我已经使用 JPA 项目生成了实体,但是我将所有生成的实体类移到了模块中,并删除了 JPA 项目。我的意思是我使用 JPA 项目进行自动实体生成,这节省了我一些时间从头开始编写相同的实体类。
-
你能在你的主类上添加@ComponentScan("org.homepingo")吗? @SpringBootApplication @ComponentScan("org.homepingo") public class SpringBootWebApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(SpringBootWebApplication.class, args); } }
-
尝试将主应用程序类从包
org.homepingo.endpoint移动到org.homepingo。
标签: spring jpa spring-boot spring-data spring-data-jpa