日期:2014-05-16  浏览次数:20412 次

HIbernate免注解实现操作数据库 及Hibernate3连接SQL的BUG解决办法
账号建了那么久,第一次发博客,只是因为遇到了一个意外的错误,结果搜查了,发现既然还是一个BUG,我不知道我为什么和BUG那么有缘,虽然不算多,学Java一年多快2年了,遇到了好多次BUG。决定这次就给它写下来。

实体对象:
package org.anno.bean;

import javax.persistence.Entity;
import javax.persistence.Id;

/**部门实体 @Table(name = "DEPT")可省略*/
@Entity
public class Dept {
/**部门编号*/
private int deptNo;
/**部门名称*/
private String dName;
/**部门地址*/
private String loc;

@Id
public int getDeptNo() {
return deptNo;
}

public void setDeptNo(int deptNo) {
this.deptNo = deptNo;
}

public String getdName() {
return dName;
}

public void setdName(String dName) {
this.dName = dName;
}

public String getLoc() {
return loc;
}

public void setLoc(String loc) {
this.loc = loc;
}
}

无需实现注解,只需要指定数据库中的字段与实体中的属性命名一致就可以自动匹配。

BUG的出现位置:
在Hibernate3中使用Hibernate连接数据库,使用的jar包连接数据库SQLSERVER会出现错误,

java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.getJDBCMajorVersion()I

网上查找资料发现原因是microsoft(微软)提供的SqlServer数据库驱动存在bug。(注意:java代码调原驱动连接数据库是没有问题的,搭配hibernate会有此问题。) 需要换一种驱动连接,使用jtds这种驱动,就可以了。

解决方法:

在浏览器中输入下载地址:http://sourceforge.net/projects/jtds/files/,下载jtds解压得到jtds-1.2.5.jar,引用到eclipse中项目目录下(去除原驱动引用),更改 hibernate配置文件:

原驱动连接配置:

<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
        <property name="connection.url">jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property>
更改jtds连接: 
        <property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
        <property name="connection.url">jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property>

(上文查找了一些其他的资料)

源代码放在压缩包里 可以供大家参考