Проблема Hibernate - " использование @OneToMany или @ManyToMany для таргетинга на несопоставленный класс"
Я нахожу свои ноги с аннотациями Hibernate, и я столкнулся с проблемой, с которой, надеюсь, кто-то может помочь.
у меня есть 2 сущности, раздел и ScopeTopic. Раздел имеет член класса списка, поэтому отношение один ко многим. Когда я запускаю свой модульный тест, я получаю это исключение:
использование @OneToMany или @ ManyToMany для таргетинга на несопоставленный класс: com.ХХХ.домен.Раздел.scopeTopic[com.ХХХ.домен.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;
}
}
Я уверен, что это мое собственное непонимание, которое виновато, поэтому некоторые рекомендации были бы замечательными, спасибо!
6 ответов:
ваши аннотации выглядят нормально. Вот что нужно проверить:
убедитесь, что аннотации
javax.persistence.Entity
, а неorg.hibernate.annotations.Entity
. Первый делает сущность обнаруживаемой. Последнее-всего лишь дополнение.если вы вручную перечисляете свои сущности (в persistence.xml, в спящем режиме.контекстно-свободная грамматика.xml или при настройке фабрики сеансов), затем убедитесь, что вы также указали
ScopeTopic
сущностиубедитесь, что вы не имеют несколько
ScopeTopic
классы в разных пакетах, и вы импортировали неправильно.
моего не было у
@Entity
на стороне многих сущностей@Entity // this was commented @Table(name = "some_table") public class ChildEntity { @JoinColumn(name = "parent", referencedColumnName = "id") @ManyToOne private ParentEntity parentEntity; }
в основном
Hibernate
надо добавитьEntity
классhibernate.cfg.xml
, как-</hibernate-configuration> </session-factory> .... <mapping class="xxx.xxx.yourEntityName"/> </session-factory> </hibernate-configuration>
У меня была та же проблема, и я мог бы решить ее, добавив сущность в persistence.XML. Проблема была вызвана из-за того, что сущность не была добавлена в конфигурацию сохраняемости. Отредактируйте файл persistence:
<persistence-unit name="MY_PU" transaction-type="RESOURCE_LOCAL"> <provider>`enter code here` org.hibernate.jpa.HibernatePersistenceProvider </provider> <class>mypackage.MyEntity</class>
...
в моем случае 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());