2010-12-06 67 views
2

我得到以下異常與Hibernate例外:與Hibernate

10:18:14,795 INFO [SchemaValidator] Running schema validator 

10:18:14,795 INFO [SchemaValidator] fetching database metadata 

10:18:16,958 INFO [DatabaseMetadata] table not found: DUMMY_TABLE 

10:18:16,963 ERROR [AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=bkoMdw-ear.ear/bkoMdw-ejb.jar#bkoMdw state=Create 
javax.persistence.PersistenceException: [PersistenceUnit: bkoMdw] Unable to build EntityManagerFactory 

(...) 

Caused by: org.hibernate.HibernateException: Missing table: DUMMY_TABLE 
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1127) 
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139) 
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:359) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) 
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) 
    at 

org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) 

的問題是,表中存在與數據源文件被正確配置。

我失蹤了什麼?有任何建議來解決這個問題?

提前致謝!

回答

6

的問題是,您認爲表存在,並且同時休眠知道,這是不正確的數據源配置是否正確。

增加日誌級別並使用-Dhibernate.show_sql=true啓用SQL語句的日誌記錄。這應該有助於追蹤這一個。

[編輯]還要確保你沒有在@Table註釋之前或之後的空白。如果你有這樣的註解:

@Table(name = "myTable ") // Note the space after the name!! 

然後Hibernate會使用引用名來創建表(所以你將不得不與SQL名稱'MYTABLE '表),但它並不總是引用名稱,當您運行查詢。

+0

休眠輸出doens't不顯示帶空格的表名稱。他們應該添加一些括號或東西 – Tommy 2012-11-26 14:13:50

+1

@Tommey:請提交錯誤報告 – 2012-11-27 08:31:53

4

還要確保案件是正確的。您可能會在dummy_table中顯示數據庫。

+0

我的表名稱和實體名稱不匹配。糟糕的拼寫。謝謝 – Ali 2012-09-03 07:41:11

6

我在我的映射中使用的視圖有同樣的問題。在禁用Hibernate的驗證之後,它可以正常工作。看來,驗證在視圖方面存在問題。

0

@亨德里克有正確的想法。我遇到了同樣的問題,我可以通過將bean下載到我的應用程序上下文文件中來解決問題。

<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean"> 
    <property name="caseSensitiveTableNames" value="false"/> 
    <property name="qualifiedTableNames" value="true"/> 
    <property name="datatypeFactory"> 
     <bean class="org.dbunit.ext.mysql.MySqlDataTypeFactory"/> 
    </property> 
    <property name="metadataHandler"> 
     <bean class="org.dbunit.ext.mysql.MySqlMetadataHandler"/> 
    </property> 
</bean> 
<bean id="dbUnitDatabaseConnection" class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean"> 
    <property name="databaseConfig" ref="dbUnitDatabaseConfig"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="transactionAware" value="true"/> 
    <property name="schema" value="yourSchemaName"/> 
</bean> 
2

我有一個與MySQL數據庫相同的問題。 問題是我使用了大寫名稱的表格。 我降低了他們,現在一切正常。

0

我從休眠中得到了同樣的異常。 就我而言,這是因爲數據庫用戶沒有正確授權查看錶。這些表格明確地存在於數據庫中。

在我將db_datareader的角色分配給該數據庫的用戶後,它就工作了。

但是,在另一種情況下,表格實際上並不存在,我得到了與hibernate完全相同的異常。我在那裏有表的情況下,我認爲休眠可能會出於安全原因沒有更多的信息。

2

爲我工作,當我改變 @Table(name = 「schema.table」) 要 @Table(name = 「表」,模式= 「綱目」)

0

我也有類似的問題, postgresql和hibernate 5.2.10。

表格已經存在。當我關閉驗證時,一切正常。事實證明,該表可能無法找到,因爲hibernate無法處理任何指定的模式。它似乎與:https://hibernate.atlassian.net/browse/HHH-11286

我更新了postgresql和方言(PostgreSQLXXDialect)。之後問題就消失了。