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引用了一个未知实体的主要内容,如果未能解决你的问题,请参考以下文章
Java - Spring Boot - Hibernate - JPA(@ManyToOne 发布错误)
org.hibernate.PersistentObjectException:分离的实体传递给坚持@ManyToOne