Java org.hibernate.MappingException:无法确定:(foo)的类型

Java org.hibernate.MappingException:无法确定:(foo)的类型,java,hibernate,one-to-one,Java,Hibernate,One To One,我有两个类由Hibernate管理,ClassA和ClassBClassA引用了ClassB。根据文档,Hibernate应该能够通过反射获得类型。我不明白为什么这不起作用。我是不是错过了一些基本的东西 这是ClassA,标记有@实体注释,并包含对ClassB的引用 package dom; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class ClassA { priv

我有两个类由Hibernate管理,
ClassA
ClassB
ClassA
引用了
ClassB
。根据文档,Hibernate应该能够通过反射获得类型。我不明白为什么这不起作用。我是不是错过了一些基本的东西

这是
ClassA
,标记有
@实体
注释,并包含对
ClassB
的引用

package dom;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class ClassA {

    private ClassB classB;

    private long id;        

    public ClassA() {};

    public ClassB getClassB() {
        return classB;
    }

    public void setClassB(ClassB classB) {
        this.classB = classB;
    }

    @Id
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }   

}
这是标有
@Enity
注释的
ClassB

package dom;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class ClassB {

    private long id;

    @Id
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

}
我得到以下堆栈跟踪:

Caused by: org.hibernate.MappingException: Could not determine type for: dom.ClassB, at table: ClassA, for columns: [org.hibernate.mapping.Column(classB)]
        at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:316)
        at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:294)
        at org.hibernate.mapping.Property.isValid(Property.java:238)
        at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:469)
        at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
        at org.hibernate.cfg.Configuration.validate(Configuration.java:1294)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1742)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)

您需要使用
@OneToOne
对字段进行注释(假设它不是
@ManyToOne
,即许多
ClassB
可以包含许多
ClassA
)注释:

@OneToOne
private ClassB classB;

这应该是正确添加实体之间关系所需的最低代码。

ClassA
中用@column注释
ClassB
。请指定两个实体之间的关系,一对多、多对多或一对多one@Arpit你的评论不正确。这个问题是关于两个实体之间的关系,
@Column
并不意味着。是的@Magnilex,你是对的,我认为专栏应该像在文章中一样工作,没有提到两个实体之间的关系。我真正的代码有一个ClassC,它有一个ClassA集合,该集合有一个对ClassB的引用,该引用被标记为@ManyToOne,这不起作用。现在是。