hibernate.cfg.xml 如果使用提示功能及dialect not set错误解决方法_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
5
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3768 | 回复: 4   主题: hibernate.cfg.xml 如果使用提示功能及dialect not set错误解决方法        下一篇 
java_along
注册用户
等级:上尉
经验:771
发帖:36
精华:0
注册:2014-2-17
状态:离线
发送短消息息给java_along 加好友    发送短消息息给java_along 发消息
发表于: IP:您无权察看 2014-11-12 20:05:42 | [全部帖] [楼主帖] 楼主

今天正好有空,想写写关于hibernate的一些东西。

首先要说的是hibernate.cfg.xml 里面的简单配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>//显示sql语句
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>//使用的方言
<property name="connection.url">jdbc:mysql://localhost:3306/ygh</property>//连接数据库url
<property name="connection.username">ygh</property>//username
<property name="connection.password">123456</property>//password
<property name="connection.driverClass">com.mysql.jdbc.Driver</property>//连接数据库驱动
<mapping resource="study/hibernate/entity/Student.hbm.xml" />//映射文件
</session-factory>
</hibernate-configuration>


最简单的配置。

这里有一点需要说明的是,xml里面有许多标签名,属性名,很难记,这时就情不自禁的想

按ctrl+’/’来提示,结果:

没有提示。

这需要我自己手动添加下dtd文件。

这个包下有/org/hibernate/hibernate-configuration-3.0.dtd,导出。

打开window=》Perferences=》XML Catalog =》 add

Locatin选择你dtd文件。 

在hibernate.cfg.xml文件的头部

Key type


选择 System ID   key写http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd

然后关掉hibernate.cfg.xml 再打开,

Ctrl+’/’ 就有提示了,哇 好开心~~ 有个好的开头。

先让我们来一下helloworld,每次写helloworld,就特别有成就感~~

建表:

create table t_student(
t_id int primary key auto_increment,
t_name varchar(50)


)创建Student对象:

package study.hibernate.entity;
public class Student {
      private int id;
      private String name;
      public int getId() {
            return id;
      }
      public void setId(int id) {
            this.id = id;
      }
      public String getName() {
            return name;
      }
      public void setName(String name) {
            this.name = name;
      }
}


就2个字段,和t_student对应。

创建Student.hbm.xml文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="study.hibernate.entity">
<class name="Student" table="t_student">
<id column="t_id" type="integer">
<generator class="native">
</generator>
</id>
<property name="name" column="t_name" type="string"></property>
</class>
</hibernate-mapping>


映射文件的作用就是说嘛实体类Student和表t_student的关系。

Test:
StandardServiceRegistryBuilder srb=new StandardServiceRegistryBuilder();
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory(srb.build());
Session session=sf.openSession();
Student s=new Student();
s.setName("ygh");
session.save(s);


运行,报错:

Exception in thread "main" org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set


这时因为 在hibernate3的时候是直接buildSessionFactory就可以的,现在这个方法过时了,

需要传入ServiceRegistry,我前面也写了new StandardServiceRegistryBuilder().build() 这样还不够,没有把xml文件里面的property传入,需要new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()), 这样就可以把属性传入了。

运行: 

成功,并显示插入语句,那么我们看看数据库里是否已经插入。

数据库中并没有数据。说明没有插入。

这是因为,我们插入后没有提交。

我们在 

保存操作加入事务,报错后commit,

则发现在数据库中

为什么id是3呢,因为 刚才insert了2次,但是都没有提交。

Helloworld案例就结束了。

该贴被java_along编辑于2014-11-13 8:31:40



赞(0)    操作        顶端