org.hibernate HibernateException Dialect must be explicitly set :*** 
使用Hibernate,有时候会遇到类似上面的异常。 
使用代码获取Session是要使用Configuration要调用Configure方法。这个方法很容易被遗忘。
SessionFactory sf=config.configure().buildSessionFactory(); Session session=sf.openSession();

通过API可以知道configure()方法的作用如下:

Use the mappings and properties specified in an application resource named hibernate.cfg.xml
configure()方法默认加载hibernate.cfg.xml文件,使该文件的映射和配置在应用程序中使用;configure()还有重载的方法来指定配置分别是
 configure(Document document)configure(File configFile)configure(String resource)configure(URL url)

  

若使用configure方法那么就可以在hibernate.cfg.xml中配置数据库的dialect:
      

<property name="dialect">数据库对应的dialect</property>

通过配置来指定数据库对于的的dialect,具体的数据库和数据库对于的dialect如下:
 
RDBMS Dialect
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect
使用spring和hibernate时如果使用时,有时候会去掉hibernate.cfg.xml,那么则要在Spring中配置dialect
<property name="hibernateProperties"><props><prop key="hibernate.show_sql">false</prop><prop key="hibernate.cache.use_query_cache">false</prop><prop key="hibernate.format_sql">true</prop><!-- 配置hibernate.dialect--><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop> </props>
</property>

  

通过Hibernate Reference 可以知道,Dialect这部分内容使和数据库的移植性有相关的,在3.2之前的版本,Hibernate是要求用户明确指定数据库的Dialect的,3.2或以上版本通过java.sql.DataBaseMetaData来确定数据库;不过该文档同时指出来这种方法局限于Hibernate已知的数据库且无法进行配置和覆盖。3.3以后,用户可以通过重写org.hibernate.resolver.DialectResolver的resolveDialect方法来自定义方言,“要注册一个或多个解析者,只要用 'hibernate.dialect_resolvers' 配置设置指定它们(由逗号、制表符或空格隔开)就可以了(请参考 org.hibernate.cfg.Environment 上的 DIALECT_RESOLVERS)”。
用户定义的类通过AvailableSettings.DIALECT_RESOLVERS 获取类名,然后通过反射来注册DialectResolver。AvailableSettings.DIALECT_RESOLVERS 配置的类在determineResolvers链上先于StandardDialectResolver,所以自定义的解释者更优先处理DatabaseMetaData。
以下使hibernate初始化DialectResolver链的类。
import org.hibernate.HibernateException;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.internal.util.StringHelper;
import org.hibernate.service.classloading.spi.ClassLoaderService;
import org.hibernate.service.spi.ServiceException;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.service.jdbc.dialect.spi.DialectResolver;
import org.hibernate.service.spi.BasicServiceInitiator;/**
* Standard initiator for the standard {@link DialectResolver} service
*
* @author Steve Ebersole
*/
public class DialectResolverInitiator implements BasicServiceInitiator<DialectResolver> {public static final DialectResolverInitiator INSTANCE = new DialectResolverInitiator();@Overridepublic Class<DialectResolver> getServiceInitiated() {return DialectResolver.class;}@Overridepublic DialectResolver initiateService(Map configurationValues, ServiceRegistryImplementor registry) {return new DialectResolverSet( determineResolvers( configurationValues, registry ) );}private List<DialectResolver> determineResolvers(Map configurationValues, ServiceRegistryImplementor registry) {final List<DialectResolver> resolvers = new ArrayList
();final String resolverImplNames = (String) configurationValues.get( AvailableSettings.DIALECT_RESOLVERS );if ( StringHelper.isNotEmpty( resolverImplNames ) ) {final ClassLoaderService classLoaderService = registry.getService( ClassLoaderService.class );for ( String resolverImplName : StringHelper.split( ", \n\r\f\t", resolverImplNames ) ) {try {resolvers.add( (DialectResolver) classLoaderService.classForName( resolverImplName ).newInstance() );}catch (HibernateException e) {throw e;}catch (Exception e) {throw new ServiceException( "Unable to instantiate named dialect resolver [" + resolverImplName + "]", e );}}}resolvers.add( new StandardDialectResolver() );return resolvers;}
}

 

转载于:https://www.cnblogs.com/JpgCode/p/3461375.html

关于Hibernate的Dialect相关推荐

  1. hibernate 的dialect(方言)配置

    RDBMS方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS39 ...

  2. hibernate的实现原理

    为什么80%的码农都做不了架构师?>>>    现在我们知道了一个概念Hibernate Session,只有处于Session管理下的POJO才具有持久化操作能力.当应用程序对于处 ...

  3. 彻底搞定用Xdoclet生成Hibernate所有配置文件

    背景:     本人在用Xdoclet生成hibernate的配置文件.实体映射文件和sql脚本的时候,每次总要出点问题,今日问题再现,我在网上泡了一个多小时,没有一篇很完整,很成功的例子.一怒之下, ...

  4. Hibernate工作原理

    现在我们知道了一个概念Hibernate Session,只有处于Session管理下的POJO才具有持久化操作能力.当应用程序对于处于Session管理下的POJO实例执行操作时,Hibernate ...

  5. 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)

    通用后台管理系统(ExtJS 4.2 +Spring MVC 3.2 + Hibernate) 开发语言JAVA 成品成品 前端技术extjs 数据库mysql,sql server,oracle 系 ...

  6. hibernate mysql自定义变量_hibernate如何得到mysql的变量

    你这执行的是纯sql,貌似有的hibernate版本不能直接用sql操作mysql数据库,我猜你没在别的方法里用SQLQuery,如果其他地方可以执行那我给你的办法你就不用看了.我当时遇到过hiber ...

  7. Hibernate学习汇总

    一.Hibernate的基本原理 1.什么是Hibernate Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了.其实对于对象来说就是持久化. Hibernate ...

  8. Spring + SpringMVC + Hibernate + Shiro整合

    以前就一直想学Shiro怎么使用,但一直没动力学,这次因为项目中要用,没办法就去学了.其实Shiro还是挺简单的,而且用着也很方便.例子是一个关于用户角色权限的例子,用户与角色,角色与权限均为多对多的 ...

  9. 什么是Hibernate方言和方言列表

    Hibernate中的方言–方言是Java JDBC类型和SQL类型之间的类和桥梁,其中包含Java语言数据类型和数据库数据类型之间的映射.Dialect允许Hibernate生成针对特定关系数据库优 ...

最新文章

  1. 【C语言应用实例】输出当月日历
  2. Asp.net的用户管理
  3. Dotnet Core使用特定的SDKRuntime版本
  4. 【渝粤教育】广东开放大学 系统工程 形成性考核 (25)
  5. Oracle标准审计实战过程详解
  6. ATC计算机会议,重点实验室张峰博士论文被国际系统领域顶会USENIX ATC 2020接收
  7. 算法应用-百钱买百鸡
  8. map迭代器遍历_一口气写了 HashMap 的 7种遍历方式,被同事夸了
  9. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.26
  10. Python调用 dll 文件
  11. 51单片机彩灯控制器c语言代码,【原创】第九届蓝桥杯单片机:彩灯控制器源程序和题目...
  12. php表白情话,唯美表白情话短句 八字古风情话
  13. 《论韩愈 》——陈寅恪
  14. QCC30xx CSR867x sink工程配置后级耳放在通话中的问题
  15. T20,寻寻觅觅冷冷清清凄凄惨惨切切。。。
  16. 从零开始实现一个基于RISC-V的流水线处理器 (1) :RISC-V指令集架构详解
  17. 清北2021毕业生就业报告出炉 清华博士0人出国,70%进体制
  18. 永澄:认知层次模型-道术器用
  19. 2022最新魔方财务管理系统织音①号模板免费下载,智简魔方免费主题模板下载
  20. arcgis符号方向_arcgis符号

热门文章

  1. 干货丨 艾建松:深瞳云涂大数据支撑户外媒体投放策略及效果监测
  2. 我是一只it小小鸟阅读笔记
  3. Keras的Tokenizer分词器
  4. NXP Support Package S32K1xx 安装
  5. 1215-Cannot add the foreign key constraint
  6. 澳洲留学计算机毕业后怎么找工作,澳洲留学毕业后找工作的注意事项
  7. 团队里A和B吵架了,经理M该干啥?
  8. 阿里云ODPS(现名MaxCompute,原名ODPS)介绍
  9. wine QQ最完美解决方案(多Linux发行版通过测试并稳定运行)
  10. Linux MySQL语句大全