我是只是知识的搬运工。
昨天下午距离下班还有半个小时的时候,遇到了一个bug,“OffUser is not mapped [from OffUser]”,刚刚开始学javaEE,java算是熟悉的,但是一个平台搭起来,需要的是ssh+js+html+css,ssh算是从头开始学,以前没有接触过,后面的三个算是有些基础,但是也不是玩的很溜,再加上一个不太熟的操作系统--MAC还有一个没用过的编译器idea,可能是我比较笨吧,进度缓慢,总是有莫名其妙的错误冒出来。
这个BUG耗费了我接近两个小时,最后找到根源的时候,简直想打死自己,还是平台,代码不太熟造成的,忘记了一个小步骤,才会导致两个小时停滞不前。
先贴一下遇到此问题时,百度到的一些建议:
1.看是否忘记将hibernate的映射文件添加到Hibernate.cfg.xml(使用Hibernate时)或者applicationContext.xml中
我用的是注解,并且前后确认了多次,绝对没有错误。
2.检查表中的字段和映射文件中的字段是否一一对应
是一一对应的。
3.检查字段名是否使用了数据库中的关键字
没有使用。
4.HQL语句是否正确
hql=“from offuser”;//没有错误(ps: 实体类offuser,映射数据库表UserOff,hql语句中的字段应该是对应的实体类名,而不是表名,这个知识点也是 在解决问题的过程中学到的)
---来自: http://jingyan.baidu.com/article/ceb9fb10dfd6c28cad2ba037.html
以上四个原因都排除了,那么到底是什么原因使得问题依然存在呢,正急得团团转的时候看到一个帖子,一个楼主提到了在hibernate环境中配置mapping,在解决问题的过程中,我并没有打开hibernate的配置文件,那么是不是这个文件中缺少了一些东西导致错误呢。
果然如此:
<mapping class="com.futuretime.cn.entity.OffUser" />
hibernate文件中缺少了这一句实体类的配置,这是我的知识掌握不牢固造成的,
那么,回忆一下hibernate在连接数据库和实体类的时候需要做哪些步骤呢?
1、创建实体类
2、映射(使用映射文件或者像我一样使用注解)
3、在hibernate文件中配置实体类(mapping)
使用时步骤:
使用dao类从数据库中取出数据,使用strust2标签在jsp文件中展示出来即可。
//实体类实例
import javax.persistence.*;
/**
* 注销用户实体类
*/
@Entity
@Table(name="UserOff")
public class OffUser {
@Id
@GeneratedValue
private int id;
@Column(name = "loginName")
private String login_Name;
@Column(name = "userName")
private String user_Name;
@Column(name = "userJst")
private String JST;
@Column(name = "registTime")
private String regist_Time;
@Column(name = "offTime")
private String off_Time;
//添加getter 和 setter方法
@Override
public String toString() {
return "OffUser{" +
"id=" + id +
", login_Name='" + login_Name + '\'' +
", user_Name='" + user_Name + '\'' +
", JST='" + JST + '\'' +
", regist_Time='" + regist_Time + '\'' +
", off_Time='" + off_Time + '\'' +
'}';
}
}