Я новичок в Hibernate и SpringBoot.Мои проекты имеют дело с поисковой системой, которая состоит из 2 независимых модулей + 1 базовый модуль, общий для обоих (где находится класс IndexSetup
).
Существует один модуль для индексации (JavaFx) и другойдля поиска через веб-браузер (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: Не сущность:class my.package.IndexSetup
Кстати, нет ошибки сборки, и до того, как модули были частью родительского проекта pom, они находились в одном проекте с классом сервера в подпапке, и это работало,Я решил разделить их для удобства во время разработки и предложить два независимых модуля в производстве.
Так почему же это работало, когда все было в рамках одного проекта Netbeans и теперь, когда модули находятся в 2 разных подпапках (но втот же пакет группового идентификатора "my.package") Я получаю это "Не сущность", и что я должен сделать, чтобы решить это, где я должен посмотреть?
Обратите внимание: я уже пробовал это без успеха («исключение нулевого указателя, невозможно загрузить базу данных»).
Редактировать 1: Я также пытался добавить @EntityScan
после этого , ноЯ все еще получаю Not an entity: class my.package.IndexSetup
:
@SpringBootApplication
@EntityScan( basePackages = {"my.package"} )
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
Редактировать 2: Архитектура проекта выглядит так:
- Parent project (my.package)
-Module Base (with IndexSetup class)
-Module Indexing (that depends on Base)
-Module Server (that also depends on Base)
Родительский pom.xml читается какследующее:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.package</groupId>
<artifactId>MyApp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--According to https://stackoverflow.com/questions/10665936/maven-how-to-build-multiple-independent-maven-projects-from-one-project-->
<modules>
<module>Base</module> <!-- Common resources which is a dependency in Indexer and Server -->
<module>Indexer</module> <!-- Indexing part with JavaFx-->
<module>Server</module> <!-- Server (spring boot) part of -->
</modules>
<name>MyApp</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArguments>
<bootclasspath>${sun.boot.class.path}${path.separator}${java.home}/lib/jfxrt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<additionalClasspathElements>
<additionalClasspathElement>${java.home}/lib/jfxrt.jar</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
</plugins>
</build>
Редактировать 3: Проблема возникает, когда указана таблица для просмотра:
Root<IndexSetup> from = criteriaQuery.from(IndexSetup.class);
Просмотр спящие источники not an entity
выбрасывается всякий раз, когда entityType == null
. Так что я не понимаю, почему тип сущности здесь нулевой, тогда как он работает вне SpringBoot?
Редактировать 4: Если я удаляю SpringApplication.run(ServerApplication.class, args);
с сервераЗатем основной метод класса тот же вызов, который вызывал проблему, то есть:
LocalDatabase.getInstance(false) // no GUI
.getAllIndexSetups();
теперь работает picobello.Конечно, это ничего не решает, так как мне все еще нужен SpringBoot для поиска!Так что для меня это означает, что Spring Boot не понимает конфигурацию гибернации.Я открыл новый вопрос , чтобы представить проблему более точно.
Любая помощь приветствуется,