hibernate的使用,关于主键类型问题
我想问的是为什么我把主键类型设置成int没有问题,设置成long就抛了一大堆异常,请各位高手帮我看下是哪里的问题,谢谢了.
org.hibernate.exception.GenericJDBCException: could not load an entity: [com.bona.zbproject.pojo.User#4]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1874)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3042)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:395)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
at com.bona.zbproject.util.HibernateUtils.queryById(HibernateUtils.java:162)
at com.bona.zbproject.util.HibernateUtils.main(HibernateUtils.java:212)
Caused by: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]可选的功能未实现
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLBindInParameterBigint(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.setLong(Unknown Source)
at org.hibernate.type.LongType.set(LongType.java:42)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1707)
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1678)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
配置文件Hibernate.cfg.xml肯定没问题
//这是我的实体类 跟User.hbm.xml对应
package com.bona.zbproject.pojo;
public class User {
private long id;
private String username ;
private String password ;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
//这个是User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="com.bona.zbproject.pojo.User" table="user">
<id name="id" type="java.lang.Long">
<generator class="increment"/>
</id>
<property name="username" length="50"/>
<property name="password" length="50"/>
</class>
</hibernate-mapping>
//以下是我的hibernate代码
package com.bona.zbproject.util;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.bona.zbproject.pojo.User;
/**
* Hibernate工具类
*
* @author Administrator
*
*/
public class HibernateUtils {
// 定义SessionFactory
public static SessionFactory factory;
// 静态初始化代码块,加载配置文件,创建SessionFactory
static {
try {
Configuration cfg = new Configuration().configure();
factory = cfg.buildSessionFactory();
} catch (HibernateException e) {
e.printStackTrace();
}
}
/**
* 通过getSession()可以获取一个session实例
*
* @return
*/
public static Session getSession() {
return factory.openSession();
}
/**
*关闭session
*
* @param session
*/
public static void closeSession(Session session) {
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
/**
* 按ID从数据库中查出记录
* @param args
*/
public static Object queryById(Class objClass,long id){
Object o =null;
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
o = session.get(objClass, id);
session.getTransaction().commit();
} catch (HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
HibernateUtils.closeSession(session);
}
return o;
}
public static void main(String[] args) {
HibernateUtils.queryById(User.class, 4);
}
}