实体类配置如下
@Entity(name="student") public class Student { // 声明变量,学号,姓名,密码; @Id @Column(name="username") private String username; @Column(name="password",length=255) private String password; @Column(name="age",length=11) private int age; @Column(name="birthday",length=32) private Date birthday; ......在项目加载过程中,发生了以下如题错误
.internal.ast.QuerySyntaxException: Student is not mapped [from Student stu order by stu.username]问题分析
在项目代码中,的确定义了Entity的class,为student,经过观察分析,发现在JPA中是利用@Entity来定义标识的, 故推理可知如下信息:
@Entity标识的实体类是JPA中进行管理和映射的Entity, 其在JPA中默认的名字为class name首字母小写。比如AccountEntity,其默认的实体名称为accountEntity.
相同的类名在JPA中,默认的实体名称相同,故无法正确识别,这个就是问题的来源。
问题修正
将daoimpl包中的from Student stu改为了student,因为如果你自己设置了entity的名字,那么就不采用默认类名为名字了
@Override public List<Student> findAllUsers() { // TODO Auto-generated method stub String hql = "from student stu"; //注意这里的student要和实体类中的entity配置名字相同,若那边entity没有写name则默认为类名 List<Student> list = (List<Student>) this.getHibernateTemplate().find(hql); return list; }