2011-09-08 21 views
6

Estoy recibiendo el siguiente Hibernate Excepción:org.hibernate.AnnotationException: @OneToOne o @ManyToOne en <entity> referencias una entidad desconocida

org.hibernate.AnnotationException: @OneToOne or @ManyToOne on cz.rohan.dusps.model.Switchport.konfiguracniTemplateAccess references an unknown entity: cz.rohan.dusps.model.KonfiguracniTemplate 
    org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:103) 
    org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541) 
    org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523) 
    org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380) 
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377) 
    org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954) 
    cz.rohan.dusps.helper.SessionFactoryHelper.initFactory(SessionFactoryHelper.java:122) 
    cz.rohan.dusps.helper.SessionFactoryHelper.getSessionFactory(SessionFactoryHelper.java:134) 
    cz.rohan.dusps.filter.HistorieZmenFilter.doFilter(HistorieZmenFilter.java:102) 
    cz.rohan.dusps.filter.CharsetFilter.doFilter(CharsetFilter.java:41) 

después de ~ 20 horas pasadas en el problema con varias personas, después de leer todas las posible blog o foro, realmente me estoy desesperando aquí.

Este es un proyecto de tamaño mediano. Debo mencionar que la base de datos es Postgres 9.1 y generamos la base de datos usando una herramienta de modelado. Hibernate se conecta a la base de datos pero no la genera.

He creado una nueva entidad en la base de datos, se llama "KonfiguracniTemplate" (plantilla de configuración). He creado el modelo, controlador, formulario, validadores, .jsp, todos básicamente copiados 1: 1 de una entidad existente de naturaleza similar. Ahora puedo trabajar con KonfiguracniTemplate, CRUD está trabajando plenamente.

El problema surge cuando hago referencia a esta KonfiguracniTemplate desde la entidad llamada Switchport. En el DB existe una relación entre los dos:

  • Switchport 1: 1 ... 0: N KonfiguracniTemplate (switchport siempre referencia a un KonfiguracniTemplate; un KonfiguracniTemplate puede hacerse referencia a cero o más veces)
  • Switchport tiene FK konfiguracniTemplateAccess_id para esta relación.

En .../modelo/Switchport.java la relación se asigna al igual que todas las demás relaciones que están trabajando:

@ManyToOne 
@JoinColumn(nullable = false) 
private KonfiguracniTemplate konfiguracniTemplateAccess; 

he intentado varias formas:

@ManyToOne 
@JoinColumn(name="konfiguracnitemplateaccess_id", nullable = false) 
private KonfiguracniTemplate konfiguracniTemplateAccess; 

o

@ManyToOne(targetEntity=KonfiguracniTemplate.class) 
@JoinColumn(name="konfiguracnitemplateaccess_id", nullable = false) 
private KonfiguracniTemplate konfiguracniTemplateAccess; 

También he comprobado:

  • ambas entidades están en el mismo paquete
  • ambos están anotados "@Entity" usando "javax.persistence.Entity importación;"
  • la acumulación no genera ningún mensaje de error/advertencia
  • , siempre y cuando la referencia en Switchport está comentado, todo está bien

No importa lo que intento no puedo deshacerme de las "referencias una entidad desconocida "excepción" ¿Alguien puede compartir una idea de lo que está sucediendo o quizás cómo depurar el problema? La stacktrace en la parte superior de la publicación es todo lo que obtengo en los registros.

¡Toda la entrada es muy apreciada!

+0

¿Esto sucede después de una compilación o en desarrollo? ¿Se ejecutan las pruebas de tu unidad? – hvgotcodes

+0

Esta es una excepción de tiempo de ejecución. La construcción es exitosa, después de eso puedo acceder al formulario de inicio de sesión, enviar y obtengo la excepción. No hacemos pruebas unitarias. – Martin

+0

, ¿verificó su jar y se aseguró de que el archivo de clase de la clase faltante esté presente en el jar después de la compilación? – hvgotcodes

Respuesta

1

¡Finalmente obtuve la solución de otro desarrollador en el equipo!

Las clases deben importarse antes de que se cree el objeto SessionFactory. Aquí faltaba la importación para la nueva clase, por lo que era desconocido para el objeto SessionFactory.

De todos modos, ¡gracias a todos por sus consejos!

+10

¿cómo resolvió exactamente este problema? ¿Qué archivo editó? ¿Puedes poner más detalles sobre lo que hiciste exactamente? – riship89

9

Apenas añada el Equipo de clase en el fichero "hibernación-cfg.xml", ya que Hibernate no se identifica sin añadir en ella.

0

Hay una posibilidad más de obtener dicha excepción; cuando no menciona su clase de mapeo en el archivo hibernate.cfg.xml. Como se mencionó anteriormente.

2

soluciones posibles:

1) Asegurarse de que la entidad se ha hecho referencia apropiadamente en hibernate.cfg.xml

<hibernate-configuration> 
<session-factory> 
    ... 
    <mapping class="com.project.entitytwo.model.EntityTwo"/> 
    ... 
</session-factory> 

2) Asegúrese de que @Entity se ha especificado en la clase -level (en la parte superior de la clase)

@Entity 
@Table(name="ENTITY_TWO") 
public class EntityTwo extends AnyClass 
{ 
    ... 
0

Tuve la misma exc eption ... me olvido añadir una anotación (@Entity y @Table) en Master Class (clase con la clave primaria)

tan solución se vuelva a comprobar cada anotación en sus entidades, no sólo me refiero @ManyToOne y @OneToMany como lo hice.

1

Acabo de tener este problema, con entidad a que hace referencia a la entidad b. Ambas entidades estaban ubicadas en un JAR común fuera del proyecto web en el que estaba trabajando; a se declaró en persistence.xml pero no fue b. Puse b en una etiqueta <class> en persistence.xml y funcionó!

+1

Gracias @Nick. Me has salvado la vida –

+1

@VictorViola De nada; ¡me alegro de poder ayudar! – Nick

1

Me encontré con este problema cuando uso Spring y no uso el archivo hibernate.cfg.xml. Se resolvió agregando el nombre completo del paquete calificado de la clase Model al método setPackagesToScan de la clase LocalSessionFactoryBean.

Cuestiones relacionadas