Как использовать hibernate с MS Access?

Я хочу использовать спящий режим с MS Access. Какой диалект мне следует использовать, и можете ли вы дать мне пример конфигурационного файла спящего режима с MS Access?

Ответ 1

Для MS Access вам понадобится диалект HXTT. Вам нужно будет использовать пакет поддержки hibernate, предоставляемый HXTT. Существует также образец проекта, который вы можете проверить для полностью работающего примера.

Ниже приведен пример минимальной конфигурации:

# 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 день, опробовав различные решения ODBC, HXTT и т.д., я нашел эту красоту:) http://ucanaccess.sourceforge.net/site.html.

Это не может быть проще: просто добавьте банки с сайта в свои проекты и добавьте их.

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>

И тебе хорошо идти.;)

Ответ 3

@Firstthumb. Извините, на самом деле это не ответ, а просто комментарий. Я был в одной лодке, рассматривая возможность использования MS Access для разработки локального соревнования по опросу на чемпионате мира по футболу 2010. Я мог получить доступ к MS Access напрямую, используя Oledb, но в качестве тренировочного упражнения, чтобы перепробовать кучу разработчиков Java, переходящих на .NET, Я хотел показать использование nHibernate как слоя DAO.

После изучения отсутствия наличия надежного и поддерживаемого диалекта из команды JBoss/Hibernate и других соображений я решил отказаться от упражнения по использованию MSAccess. Вместо этого я загрузил бесплатный SQL Express 2008.

Для тех, кто все еще хочет использовать MSAccess в .NET, см. эта ссылка)

Ответ 4

Вы можете использовать другую стратегию и свободную стратегию для решения этой проблемы (HXTT не является бесплатным):

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

Personaly У меня возникло исключение, когда я пытаюсь отменить разработку базы данных ms (org.hibernate.exception.GenericJDBCException: ошибка при чтении метаданных первичного ключа), но она работает для многих людей.

Ответ 5

Как последнее примечание (комментирование недоступно для меня): UCanAccess, безусловно, работает, хотя у меня пока нет опыта записи данных. В любом случае, в отношении используемого диалекта, я запускаю с

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

потому что UCanAccess использует HSQLDB, и я полагаю, что диалект - лучшее совпадение. Нет никакого sql файла, который фактически нажимает ms-доступ на картинке здесь, jackcess читает и записывает непосредственно в файл доступа mdb, в любом месте, насколько я могу понять, нет кода Microsoft, который интерпретирует любой sql, и поэтому использование SQLServerDialect будет только путайте код HSQLDB, пытаясь его понять.