How can I use hibernate with MS Access?

后端 未结 5 2025
太阳男子
太阳男子 2020-11-28 11:52

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?

相关标签:
5条回答
  • 2020-11-28 12:34

    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.

    0 讨论(0)
  • 2020-11-28 12:42

    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.

    0 讨论(0)
  • 2020-11-28 12:45

    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.

    0 讨论(0)
  • 2020-11-28 12:45

    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. ;)

    0 讨论(0)
  • 2020-11-28 12:48

    @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)

    0 讨论(0)
提交回复
热议问题