Springboot @EntityScan不起作用

时间:2018-06-29 04:04:28

标签: java spring-boot

我有一个Springboot应用程序,并且我的实体模型与作为依赖项包含的主应用程序分开了。

我的Application.java位于此包com.a.b.c

@SpringBootApplication
@EntityScan("com.a.b")
public class Applciation
{
    public static void main(String args[])
    {
         SpringApplication.run(Applciation.class, args);
    }
}

我的实体模型位于此包com.a.b

中的另一个项目中

但是我收到一个错误:原因:java.lang.IllegalArgumentException:不是托管类型:class

1 个答案:

答案 0 :(得分:0)

我可以和你联系。我为此花费了无数小时。

我将您的问题分为三个部分(我将使用“ entity-project”和“ spring-project”来指代包含实体类的项目和试图合并实体类的主项目):

第1部分(共3部分):确保您的实体类在entity-project中公开。

在实体项目的根目录下创建配置

package com.a.b

@Configuration
@Import ({Entity1.class, Entity1Repo.class, Entity1Key.class, 
  Entity2.class, ... })
class EntityConfig {}

第2部分(共3部分):确保您的实体类位于spring-project的类路径中。

由于您使用的是SpringBoot,所以我确定您使用的是maven(或Gradle)。

无论如何,请确保您已使用实体类安装了entity-project:

cd /path/to/entity-project/
mvn install -DskipTests 

在spring-project的maven文件中,将其包含到实体项目中。

第3部分(共3部分):使用EntityScan批注。

这只是我的口味,但是我更喜欢使用basePackageClasses而不是basePackage。

@SpringBootApplication
@EntityScan(basePackageClasses = {Entity1.class}) 
// use basePackageClasses to avoid type errors
@Import({com.a.b.EntityConfig.class}) // this is what you are missing
public class Applciation
{
    public static void main(String args[])
    {
         SpringApplication.run(Applciation.class, args);
    }
}

中提琴!