2011-02-10 1 views
76

Я нахожу свои ноги с аннотациями Hibernate, и я столкнулся с проблемой, на которую надеюсь, что кто-то может помочь.Проблема с гибернацией - «Использование @OneToMany или @ManyToMany для таргетинга на немаркированный класс»

У меня есть 2 объекта, раздел и область применения. Раздел имеет член класса List, поэтому отношение «Один ко многим». Когда я запускаю мое модульное тестирование я получаю это исключение:

Использования @OneToMany или @ManyToMany ориентации неподключенного класса: com.xxx.domain.Section.scopeTopic [com.xxx.domain.ScopeTopic]

Я бы предположил, что ошибка подразумевает, что мой объект ScopeTopic не сопоставляется с таблицей? Я не вижу, что я сделал не так. Вот классы сущностей:


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

Я уверен, что это мое собственное непонимание, что это по вине поэтому некоторые рекомендации было бы здорово, спасибо!

ответ

178

Ваши аннотации выглядят отлично. Вот вещи, чтобы проверить:

  • убедитесь, что аннотации javax.persistence.Entity, а не org.hibernate.annotations.Entity. Первый делает сущность обнаружимой. Последнее является просто дополнением.

  • если вы вручную список ваших объектов (в persistence.xml, в hibernate.cfg.xml, или при настройке сеанса завода), то убедитесь, что вы также перечислены в ScopeTopic сущность

  • убедитесь у вас нет нескольких классов ScopeTopic в разных пакетах, и вы импортировали неверный.

+13

Ах, спасибо! Точка 2 была ключом, я забыл поместить ScopeTopic в свой список свойств annotatedClasses при создании ошибки SessionFactory, n00b! – C0deAttack

+4

Точка 1 была для меня ключом: D thanks –

+3

Для тех, кто просто ударил этот комментарий. org.hibernate.annotations.Entity устарела в Hibernate 4. Точка 1 больше не применяется. – gspatel

17

Ваша сущность не может быть указана в конфигурационном файле спящего режима.

10

Шахта не имеют @Entity на многих стороне лица

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

В основном в Hibernate, нужно добавить Entity класс в hibernate.cfg.xml как-

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

    .... 
    <mapping class="xxx.xxx.yourEntityName"/> 
</session-factory> 
</hibernate-configuration> 
Смежные вопросы

 Смежные вопросы