Ответ 1
Я выяснил проблему: я не добавлял класс Team в объект Hibernate AnnotationConfiguration
. Таким образом, Hibernate не узнавал класс.
Я получаю следующее исключение Hibernate:
@OneToOne or @ManyToOne on Matchup.awayTeam references an unknown entity: Team
Упрощенный класс Matchup выглядит следующим образом:
@Entity public class Matchup implements Serializable
{
protected Team awayTeam;
@ManyToOne
@JoinColumn(name="away_team_id")
public Team getAwayTeam() {
return awayTeam;
}
}
Упрощенный класс Team выглядит следующим образом:
@Entity
public class Team implements Serializable {
protected List<Matchup> matchups;
@OneToMany(mappedBy="awayTeam", targetEntity = Matchup.class,
fetch=FetchType.EAGER, cascade=CascadeType.ALL)
public List<Matchup> getMatchups() {
return matchups;
}
}
Заметки:
Кто-нибудь может пролить свет на то, почему происходит это исключение?
Я выяснил проблему: я не добавлял класс Team в объект Hibernate AnnotationConfiguration
. Таким образом, Hibernate не узнавал класс.
Наряду с записью в файле hibernate.cfg.xml вам потребуется @Entity
аннотация для ссылочного класса.
Другое решение: убедитесь, что указанный класс включен в файл hibernate.cfg.xml
.
Я работаю в проекте с использованием Spring и Hibernate 4, и я обнаружил, что у нас нет файла hibernate.cfg.xml
. Вместо этого наш beans указан в файле applicationContext.xml
, который немного похож на
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="annotatedClasses">
<list>
<value>com.package.Bean</value>
</list>
</property>
</bean>
Добавление моего bean в список решило проблему. Вы можете найти дополнительную информацию здесь.
Попробуйте добавить Квалифицированное имя (ClassNAME), например:
<hibernate-configuration>
<session-factory name="java:/hibernate/SessionFactory">
<mapping class="co.com.paq.ClassNAME" />
</session-factory>
</hibernate-configuration>
В файле:
META-INF/hibernate.cfg.xml
Добавьте класс в hibernate.cfg
в правильном порядке. Сначала сопоставьте файл, на который будет ссылаться другой класс
У меня была такая же проблема, и я боролся с ней последние пару часов. Наконец, я обнаружил, что значение в свойстве packageToscan и фактическое имя пакета не совпадают с регистром. Пакет был в верхнем регистре (DAO), а packageToscan имел значение dao. просто хотел бы добавить это в случае, если кто-то найдет его полным
Если вы не используете hibernate.cfg.xml, вы можете добавить параметр targetEntity в аннотацию @ManyToOne/@OneToMany с классом, описывающим вашу сущность. Например: @ManyToOne (targetEntity = some.package.MyEntity.class).