Hibernate @ManyToOne ссылается на неизвестную сущность - PullRequest
39 голосов
/ 21 октября 2010

Я получаю следующее исключение 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;
    }
}

Примечания:

  • У Matchup и Team есть подклассы.Я не уверен, влияет ли это на ситуацию.
  • И Matchup, и Team перечислены в моем файле persistence.xml как включенные.
  • Если я добавлю аннотации @Transient в оба метода получения,ошибка исчезает.

Кто-нибудь может пролить свет на причину возникновения этого исключения?

Ответы [ 8 ]

63 голосов
/ 22 октября 2010

Я выяснил проблему: я не добавлял класс Team в объект Hibernate AnnotationConfiguration.Таким образом, Hibernate не узнавал класс.

19 голосов
/ 28 марта 2014

Наряду с записью в hibernate.cfg.xml вам потребуется @Entity аннотация для указанного класса.

4 голосов
/ 08 ноября 2013

Другое решение: убедитесь, что указанный класс включен в файл hibernate.cfg.xml.

3 голосов
/ 10 марта 2017

Я работаю в проекте, использующем Spring и Hibernate 4, и обнаружил, что у нас не есть файл hibernate.cfg.xml.Вместо этого, наши bean-компоненты перечислены в файле 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-компонента в список решило проблему.Вы можете найти более подробную информацию здесь .

1 голос
/ 14 апреля 2019

Если вы не используете hibernate.cfg.xml, вы можете добавить параметр targetEntity в аннотацию @ManyToOne/@OneToMany с классом, описывающим вашу сущность.

Например:

@ManyToOne(targetEntity = some.package.MyEntity.class)
0 голосов
/ 20 июня 2018

У меня была такая же проблема, и я боролся с ней последние пару часов. Наконец, я обнаружил, что значение в свойстве packageToscan и фактическое имя пакета не совпадают с регистром. Пакет был в верхнем регистре (DAO), а packageToscan имел значение dao. Я просто хотел добавить это на тот случай, если кто-нибудь найдет, что справка полностью

0 голосов
/ 06 апреля 2017

Добавьте класс в hibernate.cfg в правильном порядке. Сначала сопоставьте файл, на который будет ссылаться другой класс

0 голосов
/ 02 апреля 2014

Попробуйте добавить квалифицированное имя (ClassNAME), вот так:

<hibernate-configuration>
    <session-factory name="java:/hibernate/SessionFactory">
                  <mapping class="co.com.paq.ClassNAME" />
        </session-factory>
</hibernate-configuration>

В файле:

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