SpringBoot "no es una entidad"

Hola Mundo :

Soy nuevo en Hibernate y SpringBoot. Mis proyectos trata de un motor de búsqueda que se compone de 2 módulos independientes + 1 módulo de base comunes a ambas (donde el IndexSetupreside la clase).

Hay un módulo para la indexación (JavaFX) y el otro para buscar a través del navegador web (primavera de arranque).

El módulo de indexación consiste en una clase de "IndexSetup" que tiene los detalles sobre cómo / qué debe ser indexado:

@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

 }

Por lo tanto, funciona muy bien, los datos son indexados y puede ser recuperada a través de un método de búsqueda en el módulo de indexación.

Sin embargo, cuando ejecuto el servidor de primavera de arranque y hacer la misma búsqueda consigo java.lang.IllegalArgumentException: No es una entidad: my.package.IndexSetup clase

Por cierto que no hay error de generación, y antes de que los módulos eran partes de un proyecto pom padres, que estaban en el mismo proyecto con la clase de servidor en una subcarpeta, y funcionó. Decidí separarlos para mayor comodidad durante DEVELOPPMENT y ofrecer dos módulos independientes en la producción.

Entonces, ¿por qué funcionó cuando todo estaba bajo el mismo proyecto Netbeans y ahora que los módulos están en 2 subcarpetas diferentes (pero en el paquete Identificación del mismo grupo "my.package") me sale esto "no es una entidad" y qué debería hacer para solucionar esto, ¿dónde debo mirar?

Por favor nota: Ya he probado esto sin éxito ( "Excepción de puntero nulo, no puede cargar la base de datos").

Editar 1: Yo también trató de añadir @EntityScandespués de este , pero todavía consigo 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);
 }
}

Edición 2: La arquitectura del proyecto es como:

- Parent project (my.package)
  -Module Base (with IndexSetup class)
  -Module Indexing (that depends on Base)
  -Module Server (that also depends on Base)

El pom.xml padres se lee como la siguiente:

    <?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>

Datos 3: se origina el problema de cuando la mesa para mirar se especifica:

Root<IndexSetup> from = criteriaQuery.from(IndexSetup.class);

En cuanto a las fuentes de hibernación not an entity se lanza cada vez entityType == null. Así que no se recogen por qué el tipo de entidad es nulo, mientras que aquí se trabaja fuera de SpringBoot?

Editar 4: Si quito SpringApplication.run(ServerApplication.class, args);de método principal la clase de servidor entonces la misma llamada que fue la causa del problema es decir:

LocalDatabase.getInstance(false) // no GUI
            .getAllIndexSetups();

ahora trabaja picobello. Por supuesto que no resuelve nada ya que todavía necesito SpringBoot para la búsqueda! Así que para mí significa que la primavera de arranque no entiende la configuración de hibernación. Abrí una nueva pregunta para introducir el problema con mayor precisión.

Cualquier ayuda apreciado,

Hola Mundo :

Así sucedió que yo no utilizar correctamente las capacidades de SpringBoot. Estos son los pasos que hemos seguido. Por favor, recuerda la arquitectura del proyecto:

- Parent maven project (my.package)
 |-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)
 |-Module Indexing (that depends on Base)
 |-Module Server (that also depends on Base)
 |-Database file (myLocalDB)

1) En primer lugar me quita hibernate.cfg.xmlde la base y la dejó caer en los recursos del módulo de indexación. Lo hice porque SpringBoot tiene su propio mecanismo de configuración. También quité clase LocalDatabase de Base (ya que no sería necesario por SpringBoot) y lo dejó caer también en el módulo de indexación (donde se utiliza de hecho).

2) Siguiendo [esta] ( https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html] añadí spring-boot-starter-data-jpaa la pom.xml módulo de servidor.

3) Después de este tutorial creé una JPA Repositorio IndexSetupRepositorycon apenas una sola línea de código:

public interface IndexSetupRepository extends CrudRepository<IndexSetup, Integer> {

}

4) En el servidor application.propertiesañadí esas líneas:

# 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 server
spring.datasource.url=jdbc:h2:file:../myLocalDB;AUTO_SERVER=TRUE
spring.datasource.username=myName
# This parameter helped me discover that SpringBoot was not targetting the right table name.
spring.jpa.hibernate.ddl-auto=validate

5) Como SpringBoot me estaba diciendo que no pudo encontrar tabla llamada index_setup(véase el caso de camellos convertido a _ ), tuve que añadir esta línea a los application.properties:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

6) Ahora como llegué "Entidad no logró", eventualmente agregué @EntityScananotación a la clase principal del servidor como muchos de ustedes me aconsejó que hacer.

@EntityScan("my.package.Entities")

Tenga en cuenta que @EntityScandebe apuntar a la carpeta que contiene no la clase de entidad de la misma clase de entidad es decir, @EntityScan("my.package.Entities.IndexSetup")no funcionaba.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=212959&siteId=1
Recomendado
Clasificación