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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate @ManyToOne引用了一个未知实体相关的知识,希望对你有一定的参考价值。

我收到以下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注释,则错误消失。

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

答案

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

另一答案

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

另一答案

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

另一答案

我使用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

另一答案

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

例如:

@ManyToOne(targetEntity = some.package.MyEntity.class)
另一答案

尝试添加限定名称(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 @ManyToOne引用了一个未知实体的主要内容,如果未能解决你的问题,请参考以下文章

如何使用主键作为JPA和Hibernate的外键引用?

Java - Spring Boot - Hibernate - JPA(@ManyToOne 发布错误)

org.hibernate.PersistentObjectException:分离的实体传递给坚持@ManyToOne

Hibernate JPA - 没有填充ManyToOne关系

Hibernate @ManyToOne 调用自己

为啥在这个 Hibernate 映射中使用 @ManyToOne 而不是 @OneToOne?