【问题标题】:IllegalArgumentException: Not a managed type spring bootIllegalArgumentException:不是托管类型的弹簧靴
【发布时间】: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


【解决方案1】:

我认为无知是这个问题的最佳选择。这是一个愚蠢的错误,而不是

 entityManagerFactory.setPackagesToScan(new String[] { "org.homepingo.model" });

我写过

   entityManagerFactory.setPackagesToScan(new String[] { "com.homepingo.model" });

很抱歉 SO 社区浪费了他们的时间。

【讨论】:

    猜你喜欢
    • 2019-04-16
    • 2015-11-27
    • 2017-12-22
    • 2018-10-22
    • 1970-01-01
    • 2018-02-14
    • 2020-03-01
    • 2016-08-30
    • 2019-02-07
    相关资源
    最近更新 更多