2012-10-09 198 views
2

我有下面的代碼工作在我的spring.xml精...春天Hibernate的錯誤

<beans:bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <beans:property name="annotatedClasses"> 
      <beans:list> 
       <beans:value>org.assessme.com.entity.User</beans:value> 
      </beans:list> 
     </beans:property> 
     <beans:property name="dataSource" ref="dataSource" /> 
       <beans:property name="packagesToScan" 
     value="org.assessme.com.entity.*" /> 
     <beans:property name="hibernateProperties"> 
      <beans:props> 
       <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect 
       </beans:prop> 
       <beans:prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory 
       </beans:prop> 
       <beans:prop key="hibernate.show_sql">true</beans:prop> 
       <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop> 
      </beans:props> 
     </beans:property> 
    </beans:bean> 

我只得到了用戶對象第一個工作,你可以從豆類看到:名單。

我所有的實體都在同一個文件夾,如下圖所示

entities

的問題是,當我添加另一個類到這個列表,如...

org.assessme .com.entity.Campaign

我出現以下情況例外,當我啓動Tomcat ...

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: org.assessme.com.entity.Campaign 
    at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:272) 
    at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:227) 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:712) 
    at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:636) 
    at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:359) 
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206) 
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717) 
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 132 more 
低於10

實體的代碼,如果需要...

Campaign.java

package org.assessme.com.entity; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Table; 

@Entity 
@Table(name = "campaigns") 
public class Campaign { 

    @Column(name = "name") 
    private String name; 

    @Column(name = "id") 
    private String id; 

    public String getName() { 
     return name; 
    } 

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

    public String getId() { 
     return id; 
    } 

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

User.java

package org.assessme.com.entity; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "users") 
public class User { 

    @Column(name = "firstName") 
    private String firstName; 

    @Column(name = "lastName") 
    private String lastName; 

    @Column(name = "email") 
    private String email; 

    @Column(name = "password") 
    private String password; 

    @Column(name = "username") 
    private String username; 

    @Column(name = "access") 
    private Integer access; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name = "id") 
    private long id; 


    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 
    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 
    public String getUsername() { 
     return username; 
    } 
    public void setUsername(String username) { 
     this.username = username; 
    } 
    public Integer getAccess() { 
     return access; 
    } 
    public void setAccess(Integer access) { 
     this.access = access; 
    } 
} 
+0

什麼是您的用戶\活動bean的導入語句? –

+0

啊,等等,會加上它們 – david99world

+6

'Campaign'類沒有帶'@Id'註解的字段。你看到的錯誤是說你需要告訴Hibernate該表的PK是什麼。 –

回答

7

我認爲這個問題是Campaign沒有被註釋屬性與@Id。像這樣修復:

@Id 
@Column(name = "id") 
private String id; 
+0

完美!謝謝 – david99world