Проблема гибернации - «Использование @OneToMany или @ManyToMany для таргетинга на неподключенный класс» - PullRequest
96 голосов
/ 10 февраля 2011

Я нахожу свои ноги с аннотациями Hibernate, и у меня возникла проблема, я надеюсь, что кто-то может помочь с этим.

У меня есть 2 сущности, Section и ScopeTopic.Секция имеет член класса List, поэтому отношение Один ко многим.Когда я запускаю свой модульный тест, я получаю следующее исключение:

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

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


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

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

Ответы [ 6 ]

218 голосов
/ 10 февраля 2011

Ваши аннотации выглядят хорошо.Вот что нужно проверить:

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

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

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

19 голосов
/ 11 августа 2015

Ваша сущность может отсутствовать в файле конфигурации Hibernate.

18 голосов
/ 14 марта 2016

Шахта не имела @Entity на многоплановой сущности

@Entity // this was commented
@Table(name = "some_table")
public class ChildEntity {
    @JoinColumn(name = "parent", referencedColumnName = "id")
    @ManyToOne
    private ParentEntity parentEntity;
}
5 голосов
/ 05 мая 2016

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

<hibernate-configuration>
  <session-factory>

    ....
    <mapping class="xxx.xxx.yourEntityName"/>
 </session-factory>
</hibernate-configuration>
0 голосов
/ 04 сентября 2018

В моем случае a должен добавить мои классы при построении SessionFactory, с addAnnotationClass

Configuration configuration.configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration
            .addAnnotatedClass(MyEntity1.class)
            .addAnnotatedClass(MyEntity2.class)
            .buildSessionFactory(builder.build());
0 голосов
/ 25 августа 2018

У меня была та же проблема, и я мог решить ее, добавив объект в файл persistence.xml.Проблема была вызвана тем, что объект не был добавлен в конфигурацию постоянства.Отредактируйте файл персистентности:

<persistence-unit name="MY_PU" transaction-type="RESOURCE_LOCAL">
<provider>`enter code here`
     org.hibernate.jpa.HibernatePersistenceProvider
  </provider>
<class>mypackage.MyEntity</class>

...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...