最近突然想回顾下Hibernate的一些常用操作,于是去网上下载了最新的hibernate版本包,于是把原来练习的代码拿出来运行,结果就发现buildSessionFactory这个方法hibernate的最新版本已经不推荐使用了,于是利用开发工具的提示功能,发现有一个对应的重载方法,于是拿出来使用。
代码如下(new StandardServiceRegistryBuilder().build()是在官方文档中找到的):
public static void main(String[] args) { Configuration cfg = new Configuration(); cfg.configure("/hibernate.cfg.xml");// 加载配置信息 SessionFactory factory = cfg .buildSessionFactory(new StandardServiceRegistryBuilder() .build()); Session session = factory.getCurrentSession(); Student stu = new Student(1, "student01", "male"); Transaction tr = session.getTransaction(); try { tr.begin(); session.save(stu); tr.commit(); } catch (Exception e) { e.printStackTrace(); tr.rollback(); } finally { session.close();//此处如果外面获取的session用getCurrentSession()获取时则需要进行判断session是否已经关闭了,但是如果是openSession()获取的session的话,就不用判空了,因为他是没有关闭的。需要手动关闭。 } }
发现废弃的告警已经消除了,好了,直接运行之后就发现出问题了。报了如下异常信息:
Exception in thread "main" org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:209) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1887) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1845) at com.fit.method.TestSaveOrUpdateMethod.main(TestSaveOrUpdateMethod.java:18)
但是在方言在hibernate.cfg.xml文件中已经配置了,如下配置,但是为什么还是报呢。
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/test</property> <property name="connection.username">root</property> <property name="connection.password">mb</property> <!-- SQL dialect(方言) --> <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="current_session_context_class">thread</property> <mapping resource="com/fit/entity/Student.hbm.xml"/> </session-factory> </hibernate-configuration >
官方文档上也没搜索到,于是百度搜索了下,才发现少调用了一句话。
SessionFactory factory = cfg .buildSessionFactory(new StandardServiceRegistryBuilder() .applySettings(cfg.getProperties()).build());
必须要把cfg中配置再向里面传递一次才可以。再次运行代码OK了。
PS:只能说一句,官方的文档也是过时了呀(网上很多人也在抱怨这个问题),用发布的最新的包中的文档里面的示例代码都不能运行成功,大公司也不一定那么权威么。。。
相关推荐
hibernate3.6.0dialect.jar
hibernate 4以上Hibernate.INTEGER之类的不能使用了,之前使用的SQLiteDialect.java编译不过去了,这个可以。
1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将“hibernate\hibernate.cfg.xml”拷贝到“\WEB-INF\classes”...
hibernate.dialect org.hibernate.dialect.HSQLDialect hibernate.connection.driver_class org.hsqldb.jdbcDriver hibernate.connection.username sa hibernate.connection.password hibernate.connection.url jdbc...
南大通用GBase数据库GBase_Hibernate3.2.3_GA-Dialect_8.3.81.51_build50.1.jar
亲测可以使用kingbase8-Finaldialect-5.2.17.jar kingbase8-8.2.0.jar
Hibernate提供了多种SQL方言,例如org.hibernate.dialect.OracleDialect、org.hibernate.dialect.MySQLDialect、org.hibernate.dialect.SQLServerDialect等。我们可以在配置文件中使用元素来设置SQL方言,例如: ...
SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)
oracle连接字符串: class:oracle.jdbc.driver.OracleDriver url:"jdbc:oracle:thin:@localhost:1521:jbitdb","epet","epet" sqlserver: ...url:"jdbc:sqlserver:/...Firebird org.hibernate.dialect.FirebirdDialect
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.connection.driver_class=com.mysql.jdbc.Driver hibernate.connection.url=jdbc:mysql://localhost:3306/mydb hibernate.connection.username=...
在SpringBoot集成Hibernate时,通过配置`spring.jpa.hibernate.dialect`属性,指定使用DmDialect,就能让Hibernate知道如何与达梦数据库进行有效通信。这样,开发人员就可以利用Hibernate的高级特性,如懒加载、事务...
- `hibernate.dialect`:指定使用的方言,这里为`org.hibernate.dialect.HSQLDialect`。 - `hibernate.connection.driver_class`:数据库驱动类。 - `hibernate.connection.username` 和 `hibernate.connection....
Hibernate是一款强大的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,将复杂的SQL语句和数据操作转化为对Java对象的操作。在Java应用中,Hibernate扮演着一个中间层的角色,使得开发者可以专注于...
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect ``` **说明**:方言配置用于告诉 Hibernate 使用哪种数据库特定的 SQL 语法。例如,对于 MySQL 数据库,通常会使用 `org.hibernate....
hibernate下的kingbase的jar文件,需要的同学自行下载
Hibernate.dialect 属性用于指定 Hibernate 的数据库 dialect(方言),该属性的值是一个 Hibernate Dialect 类名,例如 org.hibernate.dialect.OracleDialect。该属性的作用是允许 Hibernate 针对特定的关系数据库...
hibernate3dialect
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect <property name="hibernate.show_sql">true ``` 3. **SessionFactory配置**:SessionFactory是Hibernate的核心对象,负责创建Session,...
Hibernate方言(Dialect)是Hibernate框架中的一个关键概念,它是Hibernate与特定数据库之间通信的桥梁。方言定义了如何将Hibernate的SQL语句转换为特定数据库所理解的SQL,包括列类型、约束、SQL语法等。例如,达梦...