2011-02-10 6 views
76

Me encuentro con Hibernate Annotations y me he topado con un problema con el que espero que alguien pueda ayudar.Problema de Hibernate - "Uso de @OneMany o @ManyToMany dirigidos a una clase no asignada"

Tengo 2 entidades, Sección y ScopeTopic. La sección tiene un miembro de la clase Lista, por lo que una relación Uno a Muchos. Cuando ejecuto mi unidad de prueba que estoy recibiendo esta excepción:

El uso de @OneToMany o @ManyToMany una clase de orientación no asignada: com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

Supongo que el error implica que mi entidad ScopeTopic no está asignada a una tabla? No puedo ver con He hecho mal. Aquí están las clases de entidad:


@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; 
    } 
} 

Estoy bastante seguro de que es mi propia falta de comprensión que tiene la culpa de manera alguna orientación Sería muy bueno, gracias!

Respuesta

178

Sus anotaciones se ven bien. Estas son las cosas a comprobar:

  • asegúrese de que la anotación es javax.persistence.Entity, y no org.hibernate.annotations.Entity. El primero hace que la entidad sea detectable. El último es solo una adición.

  • Si va a indicar manualmente las entidades (en persistence.xml, en hibernate.cfg.xml, o cuando la configuración de su fábrica de sesiones), a continuación, asegúrese de que también ha enumerado la entidad ScopeTopic

  • asegurarse no tiene múltiples clases de ScopeTopic en diferentes paquetes, y ha importado la incorrecta.

+13

Ah, gracias! El punto 2 era la clave, había olvidado poner ScopeTopic en mi lista de propiedades anotadasClasses al crear el error SessionFactory, n00b! – C0deAttack

+4

El punto 1 fue la clave para mí: D gracias –

+3

Para los que acaban de pegar este comentario. org.hibernate.annotations.Entity está en desuso en Hibernate 4. El punto 1 ya no se aplica. – gspatel

17

Es posible que su entidad no aparezca en el archivo de configuración de hibernación.

10

mía no se tiene @Entity en la entidad muchos lado

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

Sobre todo en Hibernate, es necesario añadir la clase Entity en hibernate.cfg.xml como-

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

    .... 
    <mapping class="xxx.xxx.yourEntityName"/> 
</session-factory> 
</hibernate-configuration> 
Cuestiones relacionadas