今天同事遇到一个hibernate.mapping.exception,然后帮忙解决啦!下面整理下解决方法
异常重现


第一种通过整理hibernate.cfg.xml ?Dialect
package com.util;
import java.sql.Types;
import org.hibernate.Hibernate; import org.hibernate.dialect.SQLServerDialect;
public class MyDialect extends SQLServerDialect { public MyDialect() { super();
? ? ? ? ? ? ? ?//对应hbibernate里面的数据类型,否则映射不正确! registerHibernateType(Types.NVARCHAR,Hibernate.STRING.getName()); registerHibernateType(Types.LONGVARCHAR,Hibernate.TEXT.getName()); //registerHibernateType(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName()); } } // registerHibernateType(Types.LONGVARCHAR,65535,"text");//.LONGVARCHAR 参考http://blog.csdn.net/qq804702802/article/details/47754875
然后在hibernate.cfg.xml配置不要使用原生的hibernate查询 SQL

第二种创建具体代码如下UserInfoImpl.java
@Override public List getListBySql() { // TODO Auto-generated method stub List list = new ArrayList(); Transaction tr = null; Session session = null; try { session = getSession(); tr = session.beginTransaction(); String hql = "select * from UserInfo";
? ? ? ? ? ? ? ? ? ? ? ? //创建sql查询
SQLQuery query = session.createSQLQuery(hql);?
? ? ? ? ? ? ? ? ? ? ? ?//指定UserInfo.hbm.xmlColumn 以及指定Hibernate数据类型一直
query.addScalar("U_Name",Hibernate.STRING); query.addScalar("U_Pwd",Hibernate.STRING); list = query.list(); tr.commit(); System.out.println(hql); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); tr.rollback(); }
return list; }
@Override public List<UserInfo> getListBySqlQ() { // TODO Auto-generated method stub // TODO Auto-generated method stub List<UserInfo> list = new ArrayList<UserInfo>(); Transaction tr = null; Session session = null; try { session = getSession(); tr = session.beginTransaction(); String hql = "select * from UserInfo";//添加一个实体 list = session.createSQLQuery(hql).addEntity(UserInfo.class).list(); // list=query.list(); tr.commit(); System.out.println(hql); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); tr.rollback(); }
return list; } }
最后测试
package com.util;
import java.util.List;
import com.bean.LogInfo; import com.bean.UserInfo; import com.dao.UserDao; import com.dao.impl.UserInfoImpl;
public class TestUser { public static void main(String[] args) { UserDao dao = new UserInfoImpl(); //返回object数组 List<Object[]> list = dao.getListBySql(); //逻辑与 先判断不为空 否则报NullPonitException if (list != null && list.size() > 0) {
for (Object[] objects : list) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //打印所有UserInfo的U_Name System.out.println(objects[0]); }
}
}
效果图

(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|