2009-11-17 14 views
11

Chcę użyć hibernacji z MS Access. Który dialekt powinienem używać i czy możesz dać mi przykładowy plik konfiguracji hibernacji z MS Access?Jak mogę używać hibernacji z MS Access?

+0

Jeśli nie masz nic przeciwko. Czemu? Czy nie byłoby możliwe przekierowanie do innej bazy danych, takiej jak SQLite? –

+0

Podczas gdy myślę, że szukanie czegoś innego jest dobrą sugestią, SQLite może nie być "najlepszą" alternatywą, ponieważ nie jest dobrze obsługiwane przez Hibernate (nawet jeśli takie rzeczy jak ten http://code.google.com/p/hibernate- sqlite/do istnieje). –

+0

Wygląda na to, że @VincentRamdhanie nigdy nie pracowała w środowisku korporacyjnym: D –

Odpowiedz

11

Dla MS Access potrzebny jest dialekt od HXTT. Będziesz musiał użyć hibernate support package dostarczonego przez HXTT. Istnieje również sample project, który można sprawdzić w pełni działający przykład.

Poniżej próbka minimalna konfiguracja:

# 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: Jeśli MS Access nie jest napisany w wymogu kamienia, może należy rozważyć użycie czegoś innego jak ... no, cokolwiek.

+2

+1 dla PS. Gdybym mógł, dostałbyś kolejne +1 za faktyczne udzielenie odpowiedzi na to pytanie. –

+1

-1 dla PS bez żadnego wyjaśnienia dlaczego - istnieje wiele aplikacji, które mogą być używane w Hibernate, bez korzystania z magazynu danych serwera plików, takiego jak Jet/ACE. –

+0

@ David nie jest nieoficjalnym wsparciem z Hibernate wystarczy dla ciebie? Dla mnie nie chcę polegać na dostawcy dialektów stron trzecich. –

1

@Firstthumb. Niestety, to nie jest odpowiedź, ale tylko wyrażenie komentarza. Byłem w tej samej łodzi - biorąc pod uwagę użycie MS Access, aby rozwinąć lokalną konkurencję dla piłkarskich mistrzostw świata w piłce nożnej 2010. Mógłbym uzyskać dostęp do MS Access bezpośrednio za pomocą Oledb, ale jako ćwiczenie treningowe, aby ponownie nauczyć się kilku programistów Java przeprowadzających się do .NET, Chciałem pokazać użycie nHibernate jako warstwy DAO.

Po zbadaniu niedostępności solidnego i obsługiwanego dialektu z zespołu JBoss/Hibernate i innych względów, postanowiłem zrezygnować z ćwiczenia przy użyciu MSAccess. Zamiast tego pobrałem darmowy SQL Express 2008.

Dla tych, którzy nadal chcą korzystać MSACCESS w .NET, proszę zobaczyć this link)

1

Można użyć innej strategii i bezpłatną strategię, aby rozwiązać ten problem (HXTT nie jest za darmo):

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

Osobisty Mam wyjątek, gdy próbuję odwrócić inżynierii bazy danych ms (org.hibernate.exception.GenericJDBCException: błąd podczas odczytu meta danych klucza podstawowego), ale działa dla wielu osób.

+1

"Nie wiem, gdzie działa idealnie, ale zrobiłem eksperyment używając SQLServerDialect do połączenia pliku bazy danych msaccess". Każdy, kto używa sterownika do połączenia się z bazą danych, która nie uzyskał certyfikatu Hibernate, aby działał poprawnie z tym urządzeniem, ryzykuje. Certyfikacja oznacza więcej niż podłączanie i uruchamianie pojedynczego zapytania SELECT. Proszę zacytować, kim są "wielu ludzi". Nie mam statystyk potwierdzających to stwierdzenie. – duffymo

9

Rzeczywiste rozwiązanie tutaj!

Po spędzeniu 1 dnia wypróbowania różnych rozwiązań ODBC, HXTT itp. Znalazłem to piękno :) http://ucanaccess.sourceforge.net/site.html.

To nie może być prostsze: wystarczy dodać słoiki z witryny do biblioteki projektu i.

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>   

Wiosna 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> 

i jesteś dobry, aby przejść. ;)

+0

Czy org.hibernate.dialect.SQLServerDialect jest rzeczywiście właściwym dialektem podczas korzystania z tego podejścia? – JWill

+0

To jest. Podany przykład jest kopią wklejoną z mojego działającego rozwiązania. Zakładam, że sterownik działa zasadniczo jak adapter i _ tworzy pliki accdb _SQLServerDialect-compatible_. –

+0

@ GergelyKovács hi wiem, że pytanie jest dość stare, ale czy twój program działa dobrze przez całą drogę? próbowałem go, ale z niektórymi zapytaniami ma SqlSyntaxErrorException –

1

Jako późna notatka (komentowanie nie jest dostępne dla mnie): UCanAccess na pewno działa, chociaż nie mam (jeszcze) doświadczenia w pisaniu danych. Tak czy inaczej, w odniesieniu do korzystania z dialektem, biegnę z

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

ponieważ UCanAccess używać hsqldb, a przypuszczam, że dialekt jest najlepszy mecz.Nie ma żadnego pliku sql, który w tym miejscu ma dostęp do ms-access, jack czyta i zapisuje bezpośrednio do pliku mdb dostępu, nie ma kodu microsoft interpretującego jakikolwiek sql w dowolnym miejscu, o ile mogę to zrozumieć, i dlatego użycie SQLServerDialect będzie tylko mylić kod HSQLDB próbując go zrozumieć.

+0

Podczas gdy prawdą jest, że sterownik JDBC UCanAccess używa HSQLDB jako bazy danych, UCanAccess również wstępnie przetwarza instrukcje SQL, aby próbować obsługiwać dialekt Access SQL w maksymalnym możliwym stopniu. Zespół UCanAccess ma nadzieję, że będzie w stanie zapewnić "UCanAccessDialect" dla użytkowników Hibernate, ale jest to jedna z wielu rzeczy, które aktualnie znajdują się na liście rzeczy do zrobienia. –

+0

To byłoby po prostu dla zgodności z istniejącym sql z istniejących baz danych programu Access, prawda? Nadal sql byłby przetłumaczony na połączenia-jackcess w końcu, tak myślę? –

+0

Zgadza się. Chodzi o to, aby w jak największym stopniu obsługiwać składnię SQL Access. Ostatecznie UCanAccess nadal będzie korzystał z interfejsu Jackcess API, aby faktycznie aktualizować plik bazy danych. –