【问题标题】:How can I use hibernate with MS Access?如何在 MS Access 中使用休眠?
【发布时间】:2010-12-17 11:51:14
【问题描述】:

我想通过 MS Access 使用休眠。我应该使用哪种方言,你能给我一个带有 MS Access 的示例休眠配置文件吗?

【问题讨论】:

  • 如果你不介意的话。为什么?不能切换到像 SQLite 这样的另一个数据库吗?
  • 虽然我认为寻找其他东西是一个很好的建议,但 SQLite 可能不是“最好的”替代方案,因为它没有得到 Hibernate 的很好支持(即使像 code.google.com/p/hibernate-sqlite 这样的东西确实存在)。
  • 听起来@VincentRamdhanie 从未在公司环境中工作过:D

标签: java database hibernate ms-access orm


【解决方案1】:

作为迟到的说明(我无法发表评论):UCanAccess 确实有效,尽管我(还)没有编写数据的经验。无论如何,关于要使用的方言,我使用

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

因为 UCanAccess 使用 HSQLDB,我想方言是最好的匹配。这里没有任何 sql 实际命中图片中的 ms-access,jackcess 直接读取和写入 access mdb-file,据我所知,任何地方都没有解释任何 sql 的微软代码,因此使用 SQLServerDialect 将只会混淆试图理解它的 HSQLDB 代码。

【讨论】:

  • 虽然UCanAccess JDBC 驱动程序确实使用HSQLDB 作为其后备数据库,但UCanAccess 还对SQL 语句进行预处理,以尽可能地支持Access SQL 方言。 UCanAccess 团队希望能够为 Hibernate 用户提供“UCanAccessDialect”,但这是目前待办事项列表中的许多事情之一。
  • 那只是为了与现有 Access 数据库中的现有 sql 兼容,对吧?我猜这个 sql 最终还是会被翻译成 jackcess-calls?
  • 没错。目的是尽可能地支持 Access SQL 语法。最终,UCanAccess 仍将使用 Jackcess API 来实际更新数据库文件。
【解决方案2】:

这里有实际的解决方案!

在花了 1 天时间尝试了不同的解决方案 ODBC、HXTT 等之后,我发现了这个美 :) http://ucanaccess.sourceforge.net/site.html

再简单不过了:只需将站点中的 jar 添加到您的项目库中即可。

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>          

弹簧配置:

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

你可以走了。 ;)

【讨论】:

  • 在使用这种方法时,org.hibernate.dialect.SQLServerDialect 真的是正确的方言吗?
  • 是的。给定的示例是我的工作解决方案中的复制粘贴。我假设驱动程序基本上就像一个适配器,makes accdb 文件 SQLServerDialect-compatible.
  • @GergelyKovács 嗨,我知道这个问题已经很老了,但是您的程序一直运行良好吗?我试过了,但有一些查询它有 SqlSyntaxErrorException
【解决方案3】:

您可以使用其他策略和免费策略来解决这个问题(HXTT 不是免费的):

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

我个人在尝试对 ms 数据库进行逆向工程时遇到异常(org.hibernate.exception.GenericJDBCException:读取主键元数据时出错),但它适用于许多人。

【讨论】:

  • "我不知道它在哪里工作得很好,但我做了一个实验,使用 SQLServerDialect 连接 msaccess 数据库文件"。任何使用驱动程序连接到未经 Hibernate 认证以使其软件正常工作的数据库的人都在冒风险。认证意味着做的不仅仅是连接和运行单个 SELECT 查询。请举出谁是“许多人”。我没有统计数据来支持这种说法。
【解决方案4】:

@Firstthumb。对不起,这不是一个真正的答案,而只是表达一个评论。我在同一条船上 - 考虑使用 MS Access 为 2010 年足球世界杯开发本地小费比赛。我可以使用 Oledb 直接访问 MS Access,但作为一项培训练习,可以让一群迁移到 .NET 的 Java 开发人员重新掌握技能,我想展示 nHibernate 作为 DAO 层的用法。

在调查了 JBoss/Hibernate 团队无法提供强大且受支持的方言以及其他考虑因素后,我决定放弃使用 MSAccess 的练习。我下载了免费的 SQL Express 2008。

对于那些仍然想在.NET 中使用 MSAccess 的人,请参阅this link)

【讨论】:

    【解决方案5】:

    对于 MS Access,您需要来自 HXTT 的方言。您需要使用 HXTT 提供的hibernate support package。还有一个sample project,您可以检查一个完整的工作示例。

    下面是一个最小配置示例:

    # 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 不是一成不变的要求,也许你应该考虑使用其他东西,比如......好吧,任何东西。

    【讨论】:

    • PS+1。如果可以的话,您也会因为实际回答这个问题而获得另一个 +1。
    • -1 对于 PS 没有任何解释原因 - 您可能会使用 Hibernate 来处理许多应用程序,但不适合使用像 Jet/ACE 这样的文件服务器数据存储。
    • @David Hibernate 的非官方支持还不够吗?对我来说,是的,我不想依赖第三方方言提供商。
    • -1 @Pascal Thivent :付费解决方案不是解决方案,因为如果您这样想,您只需向公司支付 10,000 美元即可解决您所有的问题。很多人都在寻找这个问题的免费解决方案,我们继续寻找......(stackoverflow.com/questions/10618065/…
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2014-07-03
    • 1970-01-01
    • 2010-10-14
    • 2014-03-02
    • 2019-02-23
    相关资源
    最近更新 更多