2012-10-26 44 views
0

我正在嘗試在註釋中使用hibernate。我用@Entity註釋了我的類(確保這是javax.persistance.Entity而不是Hibernate的實體)和@Table。Hibernate實體類不拾起

當我試圖查詢該表與

session.createQuery("from HibernateMatchedInvoiceItem").list() 

但是,這與以下情況除外

caused by: org.hibernate.hql.ast.QuerySyntaxException: HibernateMatchedInvoiceItem is not mapped [from HibernateMatchedInvoiceItem] 

我的會話工廠定義如下失敗。

<bean id="SessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" 
     parent="AbstractSessionFactory" depends-on="AppConfigHelper"> 
    <property name="hibernateProperties"> 
     <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop> 
    </props> 
    </property> 
    <property name="dataSource" ref="dataSource" /> 

我沒有定義persistant.xml文件。這是這個例外背後的原因嗎? 我的疑問是,因爲休眠所需的一切(數據庫連接&類映射)是通過配置和註釋指定的,爲什麼我們需要明確指定persistance.xml文件?

+0

你確定創建HibernateMatchedInvoiceItem表在你的數據庫? –

+0

HibernateMatchedInvoiceItem類用@Table註解(name =「matched_invoices」),而matched_invoices表有一些行。如果我正在使用簡單的jdbc模板而不是使用hibernate,這會給出結果。 – Htaras

回答

2

如果你使用註解,那麼你必須使用類=「org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean」

例子:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="annotatedClasses"> 
     <list> 
      <value>package.classname</value> 
     </list> 
    </property> 
+0

Bean不處理annotatedClasses屬性。由於:org.springframework.beans.NotWritablePropertyException:Bean類的無效屬性'annotatedClasses'[org.springframework.orm.hibernate3.LocalSessionFactoryBean]:Bean屬性'annotatedClasses'不可寫或具有無效的setter方法。 setter的參數類型是否與getter的返回類型相匹配? – Htaras

+0

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/annotation/AnnotationSessionFactoryBean.html – invariant

+0

你應該仔細檢查你的hibernate實體是否支持java bean約定。 –