2011-02-10 7 views
76

Znajduję swoje stopy przy pomocy adnotacji Hibernate i trafiłem na problem Mam nadzieję, że ktoś może pomóc.Problem hibernacji - "Używanie @OneToMany lub @ManyToMany kierowania na niezmapowaną klasę"

Mam 2 podmioty, Section and ScopeTopic. Sekcja ma członka klasy List, a więc związek One to Many. Kiedy uruchomić mój testów jednostkowych otrzymuję ten wyjątek:

Zastosowanie @OneToMany lub @ManyToMany kierowania się niemapowany klasę: com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

Założę się, że błąd sugeruje, że mój obiekt ScopeTopic nie jest mapowany do tabeli? Nie widzę, gdy zrobiłem źle. Oto podmiot klas:


@Entity 
public class Section { 
    private Long id; 
    private List<ScopeTopic> scopeTopics; 

    public Section() {} 

    @Id 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @OneToMany 
    @JoinTable(name = "section_scope", joinColumns = {@JoinColumn(name="section_id")}, 
       inverseJoinColumns = {@JoinColumn(name="scope_topic_id")}) 
    public List<ScopeTopic> getScopeTopic() { 
     return scopeTopic; 
    } 

    public void setScopeTopic(List<ScopeTopic> scopeTopic) { 
     this.scopeTopic = scopeTopic; 
    } 
} 

@Entity 
@Table(name = "scope_topic") 
public class ScopeTopic { 
    private Long id; 
    private String topic; 

    public ScopeTopic() {} 

    @Id 
    public Long getId() { 
     return id; 
    } 

    public void setId() { 
     this.id = id; 
    } 

    public String getTopic() { 
     return topic; 
    } 

    public void setTopic(String topic) { 
     this.topic = topic; 
    } 
} 

Jestem całkiem pewien, że to mój własny brak zrozumienia, że ​​co winy więc pewne wskazówki byłoby świetnie, dzięki!

Odpowiedz

178

Twoje adnotacje wyglądają dobrze. Oto rzeczy do sprawdzenia:

  • upewnij się, że adnotacja jest javax.persistence.Entity, a nie org.hibernate.annotations.Entity. Ten pierwszy sprawia, że ​​jednostka jest wykrywalna. To ostatnie jest tylko dodatkiem.

  • jeśli ręcznie wystawiania podmioty (w persistence.xml w hibernate.cfg.xml lub podczas konfigurowania fabryki sesji), a następnie upewnij się, że również wymieniony podmiot ScopeTopic

  • upewnić nie masz wielu klas ScopeTopic w różnych pakietach, a zaimportowałeś niewłaściwy.

+13

Ah, dzięki! Punkt 2 był kluczem, zapomniałem umieścić ScopeTopic w mojej liście właściwości adnotowanych klas podczas tworzenia błędu SessionFactory, n00b! – C0deAttack

+4

Punkt 1 był dla mnie kluczem: D dzięki –

+3

Dla tych, którzy właśnie trafiają w ten komentarz. org.hibernate.annotations.Entity jest przestarzałe w Hibernate 4. Punkt 1 już się nie stosuje. – gspatel

17

Twoja jednostka nie może być wymieniona w pliku konfiguracji hibernacji.

10

Kopalnia nie mają @Entity na wielu podmiotu bocznej

@Entity // this was commented 
@Table(name = "some_table") 
public class ChildEntity { 
    @JoinColumn(name = "parent", referencedColumnName = "id") 
    @ManyToOne 
    private ParentEntity parentEntity; 
} 
4

Głównie w Hibernate, trzeba dodać klasę Entity w hibernate.cfg.xml jak-

</hibernate-configuration> 
    </session-factory> 

    .... 
    <mapping class="xxx.xxx.yourEntityName"/> 
</session-factory> 
</hibernate-configuration> 
Powiązane problemy