Hibernate @ManyToOne引用了一个未知实体

问题描述 投票:38回答:8

我收到以下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中作为包含。
  • 如果我在两个getter方法上放置@Transient注释,则错误消失。

任何人都可以阐明为什么会发生这种异常吗?

java hibernate jpa
8个回答
63
投票

我发现了问题:我没有将类Team添加到Hibernate AnnotationConfiguration对象中。因此,Hibernate没有认识到这个类。


19
投票

除了在hibernate.cfg.xml中输入外,您还需要在引用的类上使用@Entity注释。


5
投票

另一种解决方案:检查以确保引用的类包含在hibernate.cfg.xml文件中。


3
投票

我使用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添加到列表中解决了问题。你可以找到更多信息here


1
投票

如果不使用hibernate.cfg.xml,可以在@ManyToOne/@OneToMany注释中添加targetEntity参数,并使用描述实体的类。

例如:

@ManyToOne(targetEntity = some.package.MyEntity.class)

0
投票

尝试添加限定名称(ClassNAME),如下所示:

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

在文件中:

META-INF/hibernate.cfg.xml

0
投票

按正确的顺序添加hibernate.cfg中的类。首先映射将由另一个类引用的文件


0
投票

我遇到了同样的问题,过去几个小时我一直在努力。我终于发现packageToscan属性中的值和实际的包名称有不匹配的情况。包是大写的(DAO),packageToscan的值是dao。只是想添加这个,以防有人发现它有用

© www.soinside.com 2019 - 2024. All rights reserved.