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?
Respuesta
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.
+1 para el PS. Si pudiera, obtendrías otro +1 por responder la pregunta también. –
-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. –
@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. –
@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)
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.
"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
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. ;)
¿Es org.hibernate.dialect.SQLServerDialect realmente el dialecto correcto mientras se usa este enfoque? – JWill
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_. –
@ 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 –
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.
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. –
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? –
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. –
- 1. MS Access trigger?
- 2. MS Access sin VBA?
- 3. MS Access prepara declaraciones
- 4. Nhibernate y MS Access
- 5. MS Access Propiedades
- 6. VBA + Hilos en MS Access
- 7. C# Cómo conectar a MS Access 2007
- 8. ¿Cómo conectar java a Ms Access 2010?
- 9. ¿Tenemos transacciones en MS-Access?
- 10. ms-access: ¿cómo comentar el código sql?
- 11. Cómo utilizar Entity Framework para la base de datos de MS Access
- 12. Seleccionar registros omitiendo filas en MS Access
- 13. ¿Cómo usar la base de datos SQLite desde MS Access?
- 14. Importación de MS ACCESS DB a mySql?
- 15. Sincronizar datos de MS Access a MS SQL
- 16. LINQ asp.net página contra MS Access.
- 17. MS Access: tamaño de papel personalizado
- 18. Crear vista en MS Access 2007
- 19. MS Access 2007 JOIN en múltiples campos
- 20. ¿Cómo puedo usar MS Access como proveedor para el marco de entidades ADO.NET?
- 21. Llamando al Servicio WCF desde MS Access
- 22. ¿Cómo eliminar en MS Access cuando se usa JOIN?
- 23. cómo usar un archivo MS-Access de Linux?
- 24. Biblioteca de MS Access para python
- 25. ¿Cómo forzo a MS Access a conservar su formato SQL?
- 26. Recuperar datos URL JSON en MS Access
- 27. Proporcionar ayuda en forma en MS Access
- 28. MS Access Rounding Precision With Group By
- 29. SQL Server Express vs MS Access
- 30. ¿Cómo implemento la paginación en SQL para MS Access?
Si no te importa. ¿Por qué? ¿No sería posible cambiar a otro DB como SQLite? –
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). –
Parece que @VincentRamdhanie nunca funcionó en un entorno corporativo: D –