Entidad desconocida al llamar EntityManager.persist ()

Jonathan M:

Tengo esta clase en QuoteProjection.java:

package com.mycompany.myapp.query;

import com.mycompany.myapp.command.domain.ProjectedQuote;
import javax.persistence.EntityManager;

public class QuoteProjection {

    private final EntityManager entityManager;
.
.
.
    public void on(CreateSubmissionEvt evt) {
        ProjectedQuote projectedQuote = new ProjectedQuote(evt.getAggregateId(), evt.getJobNumber());
        entityManager.persist(projectedQuote); // error reference this line
    }

He definido ProjectedQuoteen myApi.kt:

package com.mycompany.myapp.command.domain

@Entity
@NamedQueries(
        NamedQuery(name = "ProjectedQuote.fetch",
                query = "SELECT q FROM ProjectedQuote q WHERE q.aggregateId LIKE CONCAT(:idStartsWith, '%') ORDER BY q.id"),
        NamedQuery(name = "ProjectedQuote.count",
                query = "SELECT COUNT(q) FROM ProjectedQuote q WHERE q.aggregateId LIKE CONCAT(:idStartsWith, '%')")
)
data class ProjectedQuote(@Id var aggregateId: String, var jobNumber : String) { constructor() : this("", "") }

Cuando se ejecuta, me sale el siguiente error:

java.lang.IllegalArgumentException: Unknown entity:
com.mycompany.myapp.command.domain.ProjectedQuote
        at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:787) ~hibernate-core-5.2.17.Final.jar!/:5.2.17.Final]
        at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:768) ~[hibernate-core-5.2.17.Final.jar!/:5.2.17.Final]
.
.
.

Por la respuesta de Lesiak continuación, He intentado añadir @EntityScana la aplicación, Application.java:

package com.mycompany.myapp.query;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;

@SpringBootApplication
@EntityScan(basePackages = {"com.mycompany.myapp.command.domain"})
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

... pero ahora me sale el siguiente error y los terminada su aplicación:

2019-04-16 15:34:54.265 ERROR 4212 --- [           main] o.s.boot.SpringApplication
          : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sagaStore' defined in class path resource [org/axonframework/springboot/autoconfig/JpaAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.axonframework.modelling.saga.repository.jpa.JpaSagaStore]: Factory method 'sagaStore' threw exception; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: SagaEntry is not mapped [SELECT new org.axonframework.modelling.saga.repository.jpa.SerializedSaga(se.serializedSaga, se.sagaType, se.revision) FROM SagaEntry se WHERE se.sagaId = :sagaId]
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:590) ~[spring-beans-5.0.9.RELEASE.jar!/:5.0.9.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1247) ~[spring-beans-5.0.9.RELEASE.jar!/:5.0.9.RELEASE]
.
.
.

Sagas, se hace referencia en el mensaje de error, son parte del Marco de Axon. Así que haciendo una @EntityScande mis paquetes, parece que hizo que no escanea los paquetes de Axon, tal vez?

Estoy en mi cabeza. Cualquier ayuda es apreciada.

Lesiak:

¿Qué hay de su clase con anotaciones @Entity

Véase, por ejemplo https://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#entity-mapping-entity

Actualizar

Comprobar qué entidades se escanea. https://springbootdev.com/2017/11/13/what-are-the-uses-of-entityscan-and-enablejparepositories-annotations/amp/

Por defecto, la primavera de arranque permitirá la exploración entidad y buscar en el paquete (y sus sub-paquetes), donde @SpringBootApplicationse encuentra. Si la configuración tiene entidades en otro paquete, el uso@EntityScan

actualización 2

Después de algunas investigaciones, se descubrió que la cuestión es muy Axon-específica.

Axon necesita registrar sus propias entidades, como SagaEntryse menciona en la pregunta actualizada. Se registra a estas entidades en JpaAutoConfiguration Para hacerlo, utiliza su propia anotación @RegisterDefaultEntitiesDesafortunadamente su configuración funciona bien si se basan en el diseño del proyecto por defecto (modelos de dominio en un sub-conjunto de un paquete que contiene su aplicación), pero no juega bonito con@EntityScan

De emisión del cheque https://github.com/AxonFramework/AxonFramework/issues/245

Mi consejo es volver a empaquetar su aplicación (entitiees movimiento a un sub-paquete si el paquete de la aplicación) y quitar @EntityScan

Si le gusta la aventura, puede intentar escaneando los mismos paquetes que son escaneados por su anotación personalizada, pero no estoy seguro de si esto tendrá éxito.

Supongo que te gusta

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