hibernate的使用,关于主键类型问题

vs0025 2009-09-30 10:43:09
我想问的是为什么我把主键类型设置成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);
}



}



...全文
141 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧