2009-11-17 35 views
11

Quiero utilizar Hibernate con MS Access. ¿Qué dialecto debería usar y me puede dar un archivo de configuración de hibernación de muestra con MS Access?¿Cómo puedo utilizar Hibernate con MS Access?

+0

Si no te importa. ¿Por qué? ¿No sería posible cambiar a otro DB como SQLite? –

+0

Si bien creo que buscar otra cosa es una buena sugerencia, SQLite podría no ser la "mejor" alternativa, ya que Hibernate no lo respalda (incluso si esto es así http://code.google.com/p/hibernate- sqlite/do existe). –

+0

Parece que @VincentRamdhanie nunca funcionó en un entorno corporativo: D –

Respuesta

11

Para MS Access, necesitará el dialecto de HXTT. Tendrá que usar el hibernate support package proporcionado por HXTT. También hay un sample project que puede verificar para obtener un ejemplo completo.

A continuación, una configuración mínima de la muestra:

# 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 

PD: Si Microsoft Access no es un requerimiento escrito en piedra, tal vez debería considerar el uso de otra cosa, como ... bueno, cualquier cosa.

+2

+1 para el PS. Si pudiera, obtendrías otro +1 por responder la pregunta también. –

+1

-1 para el PS sin ninguna explicación de por qué: hay muchas aplicaciones para las que podría estar utilizando Hibernate sin que sea inapropiado usar un almacén de datos de servidor de archivos como Jet/ACE. –

+0

@David ¿No es suficiente el apoyo no oficial de Hibernate para ti? Para mí, lo es, no quiero depender de un proveedor dialecto de terceros. –

1

@Firstthumb. Lo siento, esta no es realmente una respuesta sino solo expresar un comentario. Estaba en el mismo barco, considerando usar MS Access para desarrollar una competencia local para la Copa Mundial de Fútbol 2010. Pude acceder a MS Access directamente usando el Oledb pero como ejercicio de entrenamiento para rescatar a un grupo de desarrolladores de Java que se mueven a .NET, Quería mostrar el uso de nHibernate como la capa DAO.

Después de investigar la falta de disponibilidad de un dialecto robusto y compatible del equipo de JBoss/Hibernate y otras consideraciones, decidí renunciar al ejercicio sobre el uso de MSAccess. Descargué el SQL Express 2008 gratis en su lugar.

Para aquellos que todavía quieren usar MS Access en .NET, consulte this link)

1

puede utilizar un otra estrategia y una estrategia libre para resolver este problema (HXTT no es libre):

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

Personalmente Obtuve una excepción cuando intento invertir la ingeniería de la base de datos ms (org.hibernate.exception.GenericJDBCException: Error al leer los metadatos de la clave principal), pero funciona para muchas personas.

+1

"No sé dónde funciona perfectamente o no, pero hice un experimento usando SQLServerDialect para conectar el archivo de base de datos msaccess". Cualquier persona que utilice un controlador para conectarse a una base de datos que no haya sido certificada por Hibernate para funcionar correctamente con su s/w se está arriesgando. La certificación significa hacer más que conectar y ejecutar una sola consulta SELECT. Por favor cite quiénes son "muchas personas". No tengo estadísticas para apoyar esta afirmación. – duffymo

9

Solución real aquí!

Después de pasar 1 día probando diferentes soluciones ODBC, HXTT, etc. Encontré esta belleza :) http://ucanaccess.sourceforge.net/site.html.

No podría ser más sencillo: simplemente agregue los archivos jar del sitio a las bibliotecas de proyectos y.

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>   

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

y ya está bueno para ir. ;)

+0

¿Es org.hibernate.dialect.SQLServerDialect realmente el dialecto correcto mientras se usa este enfoque? – JWill

+0

Lo es. El ejemplo dado es un copiar y pegar desde mi solución de trabajo. Supongo que el controlador básicamente actúa como un adaptador y hace que el archivo accdb _SQLServerDialect-compatible_. –

+0

@ GergelyKovács hola, sé que la pregunta es bastante antigua, pero ¿funcionó bien tu programa durante todo el proceso? Lo intenté pero con algunas dudas tiene SqlSyntaxErrorException –

1

Como nota tardía (los comentarios no están disponibles para mí): UCanAccess seguramente funciona, aunque todavía no tengo experiencia en la escritura de datos. De todas formas, en relación con el dialecto de usar, corro con

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

porque UCanAccess usar HSQLDB, y supongo que el dialecto es el mejor partido.No hay ningún sql realmente accediendo a ms-access en la imagen aquí, jackcess lee y escribe directamente en el acceso mdb-file, no hay ningún código de Microsoft interpretando ningún SQL en ninguna parte, por lo que puedo entender, y por lo tanto, usar SQLServerDialect solo confunde el código HSQLDB tratando de entenderlo.

+0

Si bien es cierto que el controlador UCanAccess JDBC usa HSQLDB como su base de datos de respaldo, UCanAccess también procesa previamente las sentencias SQL para intentar y admitir el dialecto SQL de acceso tanto como sea posible. El equipo de UCanAccess espera poder proporcionar un "UCanAccessDialect" para los usuarios de Hibernate, pero esa es una de las muchas cosas que actualmente se encuentran en la lista de tareas pendientes. –

+0

Eso sería solo para la compatibilidad con sql existente de las bases de datos de acceso existentes, ¿verdad? Aun así, el sql se traduciría en llamadas al azar al final, ¿no? –

+0

Eso es correcto. La intención sería apoyar la sintaxis de Access SQL tanto como sea posible. En última instancia, UCanAccess seguiría utilizando la API de Jackcess para actualizar realmente el archivo de la base de datos. –