SpringBoot“不是实体”

我是 Hibernate 和 SpringBoot 的新手。我的项目涉及一个由 2 个独立模块 + 1 个共同的基本模块组成的搜索引擎(IndexSetup类所在的位置)。


一个模块用于索引 (JavaFx),另一个模块用于通过 Web 浏览器 (Spring Boot) 进行搜索。


索引模块涉及一个“IndexSetup”类,该类详细说明了如何/什么应该被索引:


@Entity

@Table(name = "IndexSetups")

@Access(AccessType.PROPERTY)

public class IndexSetup {

  private final SimpleIntegerProperty id = new SimpleIntegerProperty();


  @Id

  @GeneratedValue(strategy = GenerationType.AUTO) // For H2 AUTO is required to auto increment the id

  public int getId() {

      return id.get();

  }


  //... other properties, getters and setters


 }

所以它工作得很好,数据被索引并且可以通过索引模块中的搜索方法进行检索。


但是,当我运行 Spring Boot 服务器并执行相同的搜索时,我得到 java.lang.IllegalArgumentException: Not an entity: class my.package.IndexSetup


顺便说一句,没有构建错误,并且在模块成为父 pom 项目的一部分之前,它们与子文件夹中的服务器类位于同一个项目中,并且可以正常工作。为了方便开发,我决定将它们分开,并在生产中提供两个独立的模块。


那么为什么当所有内容都在同一个 Netbeans 项目下并且现在模块位于 2 个不同的子文件夹中(但在同一个组 ID 包“my.package”中)时它会起作用,我得到这个“不是实体”,我该怎么办要解决这个问题,我应该在哪里看?


请注意:我已经尝试过但没有成功(“空指针异常,无法加载数据库”)。


茅侃侃
浏览 195回答 3
3回答

手掌心

我认为您应该在第二个项目/模块中添加到您的实体的 @EntityScan 注释包中

繁花不似锦

首先,一些检查:您的所有配置是否仅使用 ServerApplication 或任何 Java 类中的注释构建,或者在 XML/YML 文件中是否还有其他外部配置?也许寻找冲突。如果可能,我们不希望将 XML 与注释配置混合使用。尝试删除@Serializable(不是强制性的)。尝试在您的根包中移动您的实体(作为测试)。检查导出的包@Entity是否正确。问题:你所说的“模块”是什么,它是一个子包或 Maven 模块还是其他东西?我们可以有关于这个的包名的配置吗?编辑:对于多模块项目,您是否遵循了spring.io关于多模块项目的建议?您是否在子模块中导入了 Spring BOM(或启动器)并测试了Spring Boot Maven 插件?你能提供你的application.properties(或application.yml其他)你的数据源配置吗?您应该检查您的数据源(和 JPA、驱动程序类等)是否正确定义;见spring.io

慕的地10843

&nbsp; &nbsp; 所以碰巧我没有正确使用 SpringBoot 功能。这是我遵循的步骤。请记住项目的架构:- Parent maven project (my.package)&nbsp;|-Module Base (with IndexSetup class and [initialy] hibernate.cfg.xml in /resources. It also had in the beginning LocalDatabase class to access to the local db via hibernate)&nbsp;|-Module Indexing (that depends on Base)&nbsp;|-Module Server (that also depends on Base)&nbsp;|-Database file (myLocalDB)1) 首先,我hibernate.cfg.xml从 Base 中删除并将其放入索引模块的资源中。我这样做是因为 SpringBoot 有自己的配置机制。我还从 Base 中删除了 LocalDatabase 类(因为 SpringBoot 不需要它)并将它也放到索引模块中(确实在那里使用了它)。2) 按照 [this]( https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html]我添加spring-boot-starter-data-jpa到服务器模块 pom.xml。3)按照本教程,我创建了一个IndexSetupRepository几乎没有一行代码的 JPA 存储库:public interface IndexSetupRepository extends CrudRepository<IndexSetup, Integer> {}4)在服务器中,application.properties我添加了这些行:# Embedded database configuration# The embedded database file is one level above the Server folder (ie directly within the parent project)# we use the auto server mode to be able to use the database simultaneously in the indexer and the serverspring.datasource.url=jdbc:h2:file:../myLocalDB;AUTO_SERVER=TRUEspring.datasource.username=myName# This parameter helped me discover that SpringBoot was not targetting the right table name.spring.jpa.hibernate.ddl-auto=validate5) 由于 SpringBoot 告诉我它找不到命名的表index_setup(请参阅转换为 _ 的驼峰案例),我不得不将此行添加到 application.properties :spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl6) 现在,当我得到“Entity not managed”时,我最终@EntityScan按照你们许多人的建议向 Server 主类添加了注释。@EntityScan("my.package.Entities")请注意,@EntityScan应该指向包含实体类的文件夹而不是实体类本身,即@EntityScan("my.package.Entities.IndexSetup")不起作用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python