2015-06-25 3 views
0

У меня есть два класса, управляемых Hibernate, ClassA и ClassB. ClassA имеет ссылку на ClassB. Согласно документации, Hibernate должен иметь возможность получить тип посредством отражения. Я не понимаю, почему это не работает. Я пропустил что-то действительно фундаментальное здесь?org.hibernate.MappingException: Не удалось определить тип для: (foo)

Это ClassA с отметкой @Entity аннотация и держатель ссылки на 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; 
    } 

} 

Это ClassB помеченный @Enity аннотацию.

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) 
+0

Аннотировать свой 'ClassB' в' ClassA' с @Column – Arpit

+1

Просьба указать связь между двумя объектами, от одного до многих, от многих до многих или от одного до одного –

+0

@Arpit Ваш комментарий неверен. Этот вопрос касается отношения между двумя объектами, которые '@ Column' не означает. – Magnilex

ответ

2

Вы должны аннотировать поле с @OneToOne (в предположении, что это не @ManyToOne, т.е. многие ClassB может содержать много ClassA iS) аннотацию :

@OneToOne 
private ClassB classB; 

Это должен быть минимальный код, необходимый для правильного добавления отношения между объектами.

+0

У моего реального кода был класс ClassC, который имеет коллекцию ClassA, которая имеет ссылку на ClassB, которая была отмечена @ManyToOne, которая не работала. Теперь это. – AlyoshaKaramazov

Смежные вопросы