2013-07-15 41 views
2

這是我的POJO,一個簡單的學生課。Hibernate org.hibernate.MappingException for non-annotated field

org.hibernate.MappingException: Could not determine type for: java.util.List, at table: Students, for columns: [org.hibernate.mapping.Column(homework)] 

這就是:

@Proxy(lazy = false) 
@Entity(name = "Students") 
public class Student implements Serializable { 

    private static final long serialVersionUID = -9182600037012718128L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 
    @Column 
    private String name; 

    private List<Homework> homework; // <-- the problematic line 

    public Student(){ 
    } 

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

    public getName(){return name;} 
    public setName(String name){this.name = name;} 

    public getHomework(){return homework;} 
    public setHomework(List<Homework> homework){this.homework = homework;} 
} 

不幸的是,即使homework場沒有被標註(因爲我目前不想把它映射到我的DB),我跑我的應用程序時,你得到這個異常我休眠-config.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"> 
    <property name="username" value="root" /> 
    <property name="password" value="root" /> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/test" /> 
    <property name="testOnBorrow" value="true" /> 
    <property name="validationQuery" value="select 1" /> 
</bean> 

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="hibernateProperties"> 
     <value> 
      hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 
      hibernate.hbm2ddl.auto=update 
      hibernate.show.sql=true 
     </value> 
    </property> 
    <property name="annotatedClasses"> 
     <list> 
      <value>com.test.entity.Student</value> 
     </list> 
    </property> 
</bean> 

任何幫助是apprec iated! 謝謝!

回答

5

可以使非映射字段transient,使休眠不嘗試與DB

private transient List<Homework> homework; 

地圖,或者你可以用@javax.persistence.Transient註解註釋它

休眠的
@Transient 
private List<Homework> homework; 

一個特點是它會嘗試將實體類的所有字段與表的相應列映射。因此,對於變量homework,它在映射表中搜索具有相同名稱「家庭作業」(不區分大小寫)的相應列。

參見文檔here,和它說

每一個非靜態的非瞬態特性(字段或取決於 訪問類型的方法)的實體被認爲是持久的,除非你 其標註爲@Transient 。沒有註釋您的財產 等同於相應的@Basic註釋。

+0

感謝您的快速響應...但爲什麼它映射?不應該Hibernate映射只有註釋的字段? –

+0

@ZivLevy我更新了帖子來回答你的問題 – sanbhat

+1

非常感謝Sanbhat!乾杯... –

相關問題