- 问题的提出
实体类配置如下
@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;
}