Problema di ibernazione: “Uso di @OneToMany o @ManyToMany che punta a una class non mappata”

Sto trovando i miei piedi con Hibernate Annotations e ho riscontrato un problema, spero che qualcuno possa aiutarti.

Ho 2 entity framework, Section e ScopeTopic. La sezione ha un membro della class List, quindi una relazione One to Many. Quando eseguo il mio test unitario sto ricevendo questa eccezione:

Uso di @OneToMany o @ManyToMany con targeting per una class non mappata: com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

Suppongo che l’errore implichi che la mia entity framework ScopeTopic non sia mappata su una tabella? Non riesco a vedere con ho sbagliato. Ecco le classi delle quadro:


@Entity public class Section { private Long id; private List 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 getScopeTopic() { return scopeTopic; } public void setScopeTopic(List 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; } } 

Sono abbastanza sicuro che la mia mancanza di comprensione è colpa tua, quindi qualche consiglio sarebbe fantastico, grazie!

Le tue annotazioni stanno bene. Ecco le cose da controllare:

  • assicurati che l’annotazione sia javax.persistence.Entity e non org.hibernate.annotations.Entity . Il primo rende l’ quadro rilevabile. Quest’ultimo è solo un’aggiunta.

  • se stai elencando manualmente le tue quadro (in persistence.xml, in hibernate.cfg.xml, o quando configuri la tua factory di sessione), assicurati di aver elencato anche l’ quadro ScopeTopic

  • assicurati di non avere più classi ScopeTopic in pacchetti diversi e di averne importato uno sbagliato.

La tua quadro potrebbe non essere elencata nel file di configurazione di ibernazione.

Il mio non aveva @Entity sulle molte quadro collaterali

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

Principalmente in Hibernate , è necessario aggiungere la class Entity in hibernate.cfg.xml come-

   ....    

Ho avuto lo stesso problema e ho potuto risolverlo aggiungendo l’ quadro in persistence.xml. Il problema è stato causato dal fatto che l’ quadro non è stata aggiunta alla configurazione di persistenza. Modifica il tuo file di persistenza:

  `enter code here` org.hibernate.jpa.HibernatePersistenceProvider  mypackage.MyEntity 

Nel mio caso a deve aggiungere le mie classi, quando si costruisce SessionFactory , con addAnnotationClass

 Configuration configuration.configure(); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); SessionFactory sessionFactory = configuration .addAnnotatedClass(MyEntity1.class) .addAnnotatedClass(MyEntity2.class) .buildSessionFactory(builder.build());