2009-11-17 51 views
11

我想在MS Access中使用休眠。我應該使用哪種方言,並且可以給我一個帶MS Access的示例休眠配置文件?如何在MS Access中使用休眠?

+0

如果你不介意。爲什麼?難道不可能像SQLite那樣使用另一個數據庫? – 2009-11-17 15:05:58

+0

雖然我認爲尋找其他東西是一個很好的建議,但SQLite可能不是「最好的」選擇,因爲它不被Hibernate支持(即使這樣的http://code.google.com/p/hibernate- sqlite /確實存在)。 – 2009-11-17 15:20:25

+0

聽起來@VincentRamdhanie從未在公司環境中工作過:D – 2016-10-05 14:37:37

回答

11

對於MS Access,您需要HXTT的方言。您需要使用HXTT提供的hibernate support package。還有一個sample project,你可以檢查一個完整的工作示例。

下面,樣品最低配置:

# Hxtt Access dialect sample 
hibernate.dialect=com.hxtt.support.hibernate.HxttAccessDialect 
hibernate.connection.driver_class=com.hxtt.sql.access.AccessDriver 
hibernate.connection.url=jdbc:access:///c:/yourAccessDirectory 

PS:如果MS Access是不是刻在石頭上的要求,也許你應該考慮使用別的東西一樣......嗯,什麼事。

+2

+1。如果我能,你會得到另一個實際上回答這個問題的+1。 – 2009-11-17 18:21:48

+1

-1爲PS沒有任何解釋爲什麼 - 有很多應用程序,您可能會使用Hibernate,而不適合使用像Jet/ACE這樣的文件服務器數據存儲。 – 2009-11-17 23:51:20

+0

@David Hibernate對你來說不是非官方的支持嗎?對我而言,我不想依賴第三方方言提供者。 – 2009-11-18 18:35:36

1

@Firstthumb。對不起,這不是一個真正的答案,而只是表達了一個評論。我在同一條船上 - 考慮使用MS Access爲2010年世界盃足球賽制定本地小費賽事。我可以直接使用Oledb來訪問MS Access,但作爲一個訓練練習來重振一羣轉向.NET的Java開發人員,我想展示nHibernate作爲DAO層的用法。

在調查了JBoss/Hibernate團隊中一個強大且支持的方言的不可用性和其他考慮因素後,我決定放棄使用MSAccess的練習。我下載了免費的SQL Express 2008。

對於那些誰仍然希望在.NET中使用MSACCESS,請參閱this link

1

您可以使用其他策略和免費策略來解決這個問題(HXTT是不是免費的):

http://www.programmingforfuture.com/2011/06/how-to-use-ms-access-with-hibernate.html

Personaly我試圖逆向工程ms數據庫時遇到異常(org.hibernate.exception.GenericJDBCException:讀取主鍵元數據時出錯),但它適用於很多人。

+1

「我不知道它在哪裏工作完美,但我做了一個使用SQLServerDialect連接msaccess數據庫文件的實驗」。任何使用驅動程序連接到尚未經過Hibernate認證的數據庫才能正常使用它們的軟件的用戶都面臨着風險。認證意味着不僅僅是連接和運行單個SELECT查詢。請引用「很多人」是誰。我沒有統計數據支持這一說法。 – duffymo 2012-06-05 10:01:35

9

這裏的實際解決方案!

經過1天試用不同的解決方案ODBC,HXTT等我發現這個美麗:) http://ucanaccess.sourceforge.net/site.html

它不可能更簡單:只需將網站上的jar添加到您的項目庫和。

META-INF/persistence.xml中

<?xml version="1.0" encoding="utf-8"?> 
<persistence> 
    <persistence-unit name="traderMandate"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" /> 
      <property name="hibernate.connection.url" value="jdbc:ucanaccess://C:/MY.accdb;" /> 
      <property name="hibernate.connection.driver_class" value="net.ucanaccess.jdbc.UcanaccessDriver"/> 
      <property name="hibernate.archive.autodetection" value="class" /> 
     </properties> 
    </persistence-unit> 
</persistence>   

Spring配置:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="traderMandate"/> 
</bean> 

<tx:annotation-driven/> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean> 

,你是好去。 ;)

+0

使用這種方法時,org.hibernate.dialect.SQLServerDialect真的是正確的方言嗎? – JWill 2014-12-03 14:56:29

+0

是的。給出的例子是來自我的工作解決方案的複製粘貼。我假設驅動程序基本上像一個適配器和_makes_ accdb文件_SQLServerDialect-compatible_。 – 2014-12-03 15:49:51

+0

@GergelyKovács嗨,我知道這個問題很老,但你的程序一直工作得很好嗎?我嘗試過但是有一些查詢它有SqlSyntaxErrorException – 2017-04-24 20:33:17

1

作爲一個晚期筆記(評論是不適用於我):UCanAccess肯定有效,雖然我還沒有(有)寫數據的經驗。不管怎麼說,對於方言的使用,我用

  <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 

因爲UCanAccess使用HSQLDB運行,我想這話是最好的搭配。這裏沒有任何sql實際觸及ms訪問,jackcess直接讀取和寫入訪問mdb文件,沒有任何微軟代碼可以解釋任何sql的任何地方,據我所知,因此使用SQLServerDialect將會只會混淆HSQLDB代碼試圖理解它。

+0

UCanAccess JDBC驅動程序確實使用HSQLDB作爲其後備數據庫,但UCanAccess還預處理SQL語句以嘗試並儘可能地支持Access SQL方言。 UCanAccess團隊希望能夠爲Hibernate用戶提供「UCanAccessDialect」,但這是目前待辦事項列表中的許多事情之一。 – 2016-02-09 13:19:31

+0

這只是爲了與現有的Access數據庫現有的SQL兼容,對吧?儘管如此,sql最終還是會轉化爲jackcess-calls,我猜? – 2016-02-12 16:22:27

+0

這是正確的。目的是儘可能地支持Access SQL語法。最終,UCanAccess仍然會使用Jackcess API來實際更新數據庫文件。 – 2016-02-12 16:35:12