我想在MS Access中使用hibernate。我应该使用哪种方言,你能给我一个带MS Access的示例hibernate配置文件吗?
答案 0 :(得分:13)
对于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不是书面要求,也许你应该考虑使用其他东西,比如......好吧,等等。
答案 1 :(得分:13)
此处的实际解决方案!
在花了一天时间尝试不同的解决方案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配置:
<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>
你很高兴去。 ;)
答案 2 :(得分:1)
您可以使用其他策略和免费策略来解决此问题(HXTT不是免费的):
http://www.programmingforfuture.com/2011/06/how-to-use-ms-access-with-hibernate.html
Personaly我尝试对ms数据库进行逆向工程时遇到异常(org.hibernate.exception.GenericJDBCException:读取主键元数据时出错),但它适用于很多人。
答案 3 :(得分:1)
作为一个迟到的注释(评论不适合我):UCanAccess肯定有效,虽然我还没有(还)有写数据的经验。无论如何,关于使用的方言,我用
运行 <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
因为UCanAccess使用HSQLDB,我认为方言是最佳匹配。这里没有任何sql实际点击ms-access,jackcess直接读取和写入访问mdb文件,根据我的理解,没有微软代码在任何地方解释任何sql,因此使用SQLServerDialect只会混淆尝试理解它的HSQLDB代码。
答案 4 :(得分:0)
@Firstthumb。对不起,这不是一个真正的答案,只是表达评论。我在同一条船上 - 考虑使用MS Access为2010年足球世界杯开发本地小费比赛。我可以使用Oledb直接访问MS Access,但作为一项训练练习,重新安排一群Java开发人员转向.NET,我想展示nHibernate作为DAO层的用法。
在调查了JBoss / Hibernate团队无法获得强大且支持的方言以及其他考虑因素后,我决定放弃使用MSAccess的练习。我下载了免费的SQL Express 2008。
对于那些仍想在.NET中使用MSAccess的用户,请参阅this link)