2011-09-08 8 views
6

Sto ricevendo il seguente Hibernate Eccezione:org.hibernate.AnnotationException: @OneToOne o @ManyToOne su <entity> riferimenti un'entità sconosciuta

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) 

dopo ~ 20 ore trascorse sul problema con le varie persone, dopo aver letto tutti i possibile blog o forum, sto davvero diventando disperato qui.

Questo è un progetto di medie dimensioni. Dovrei menzionare che il database è Postgres 9.1 e generiamo il DB utilizzando uno strumento di modellazione. Hibernate si connette al database ma non lo genera.

Ho creato una nuova entità nel database, si chiama "KonfiguracniTemplate" (modello di configurazione). Ho creato il modello, il controller, la forma, i validatori, i .jsp, tutti sostanzialmente copiati 1: 1 da un'entità esistente di natura simile. Ora posso lavorare con KonfiguracniTemplate, CRUD è completamente funzionante.

Il problema si presenta quando faccio riferimento a questo KonfiguracniTemplate dall'entità chiamata Switchport. Nel DB c'è una relazione tra i due:

  • switchport 1: 1 ... 0: N KonfiguracniTemplate (switchport fa sempre riferimento a KonfiguracniTemplate, un KonfiguracniTemplate è possibile ricondurre a zero o più volte)
  • switchport ha FK konfiguracniTemplateAccess_id per questa relazione.

In .../modello/Switchport.java la relazione viene mappata come tutte le altre relazioni che stanno lavorando:

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

ho provato varie forme:

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

o

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

Ho anche controllato:

  • entrambe le entità sono nello stesso pacchetto
  • entrambi sono annotati "@Entity" usando "importazione javax.persistence.Entity;"
  • la build non produce messaggi di errore/avvertimento
  • finché il riferimento switchport è commentata, è tutto a posto

Non importa quello che provo non può sbarazzarsi dei "riferimenti un'entità sconosciuta " eccezione. Qualcuno può, per favore, condividere un'idea di ciò che sta accadendo o magari di come risolvere il problema? Lo stacktrace nella parte superiore del post è tutto ciò che ottengo nei registri.

Tutti gli input sono molto apprezzati!

+0

questo succede dopo una costruzione o in fase di sviluppo? I tuoi test unitari sono eseguiti? – hvgotcodes

+0

Questa è un'eccezione di runtime. La compilazione ha esito positivo, dopo di che posso accedere al modulo di accesso, inviare e ottengo l'eccezione. Non facciamo test unitari. – Martin

+0

hai controllato il tuo jar e assicurati che il file di classe per la classe mancante sia presente nel jar dopo la creazione? – hvgotcodes

risposta

1

Finalmente ottenuto la soluzione da un altro sviluppatore del team!

Le classi devono essere importate prima che venga creato l'oggetto SessionFactory. Qui mancava l'importazione per la nuova classe, quindi era sconosciuta all'oggetto SessionFactory.

In ogni caso, grazie a tutti per i vostri suggerimenti!

+10

come hai risolto esattamente questo problema? Quale file hai modificato? Puoi descrivere più dettagliatamente cosa hai fatto esattamente. – riship89

9

Basta aggiungere la classe squadra al file "hibernate-cfg.xml", perché Hibernate non identifica senza aggiungere in esso.

0

C'è una possibilità in più di ottenere tale eccezione; quando non si menziona la classe di mappatura nel file hibernate.cfg.xml. Come detto sopra.

2

Possibili soluzioni:

1) Assicurarsi che il soggetto è stato opportunamente riferimento in hibernate.cfg.xml

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

2) Verificare che @Entity è stata specificata la classe -level (nella parte superiore della classe)

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

Ho avuto la stessa exc eption ... ho solo dimenticato aggiungere annotazioni (@Entity, e @Table) sul master class (classe con la chiave primaria)

così soluzione è doppio controllo ogni annotazione nei tuoi soggetti, voglio dire non solo @ManyToOne e @OneToMany come ho fatto io.

1

Ho appena avuto questo problema, con l'entità a che fa riferimento all'entità b. Entrambe le entità si trovavano in una JAR comune al di fuori del progetto web su cui stavo lavorando; a è stato dichiarato in persistence.xml ma non lo era b. Ho inserito b in un tag <class> in persistence.xml e ha funzionato!

+1

Grazie @Nick. Mi hai salvato la vita. –

+1

@VictorViola Prego; felice di poterti aiutare! – Nick

1

Mi sono imbattuto in questo problema quando si utilizza Spring e non si utilizza il file hibernate.cfg.xml. È stato risolto aggiungendo il nome del pacchetto completo della classe Model al metodo setPackagesToScan della classe LocalSessionFactoryBean.

Problemi correlati