I want to use hibernate with MS Access. Which dialect should I use and can you give me a sample hibernate configuration file with MS Access?
You can use an other strategy and a free strategy to resolve this problem (HXTT is not free) :
http://www.programmingforfuture.com/2011/06/how-to-use-ms-access-with-hibernate.html
Personaly I got an exception when I try to reverse engineering the ms database (org.hibernate.exception.GenericJDBCException: Error while reading primary key meta data), yet it works for many people.
As a late note (commenting is not available for me): UCanAccess surely works, although I don't (yet) have experience with writing data. Anyways, regarding the dialect to use, I run with
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
because UCanAccess use HSQLDB, and I suppose that dialect is the best match. There isn't any sql actually hitting ms-access in the picture here, jackcess reads and writes directly to the access mdb-file, there is no microsoft code interpreting any sql anywhere, as far as I can understand, and therefore using SQLServerDialect will only confuse HSQLDB code trying to understand it.
For MS Access, you'll need the dialect from HXTT. You'll need to use the hibernate support package provided by HXTT. There is also a sample project that you can check for a fully working example.
Below, a sample minimal configuration:
# 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: If MS Access is not a written in stone requirement, maybe you should consider using something else like... well, anything.
Actual solution here!
After spending 1 day trying out different solutions ODBC, HXTT, etc. I found this beauty :) http://ucanaccess.sourceforge.net/site.html.
It couldn't be any simpler: just add the jars from the site to your project libs and.
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 config:
<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>
And you're good to go. ;)
@Firstthumb. Sorry, this is not really an answer but just expressing a comment. I was in the same boat - considering using MS Access to develop a local tipping competition for the Football World Cup 2010. I could access MS Access directly using the Oledb but as a training exercise to reskill a bunch of Java developers moving to .NET, I wanted to show the usage of nHibernate as the DAO layer.
After investigating the non-availability of a robust and supported dialect from JBoss/Hibernate team and other considerations, I decided to forego the exercise on using MSAccess. I downloaded the free SQL Express 2008 instead.
For those who still want to use MSAccess in .NET, please see this link)