我是Hibernate的新手。我正在尝试运行一个简单的查询,以查看用户的给定登录信息是否正确:
public boolean checkLogin(String user, String pw)
{
pw = Util.encrypt(pw);
String sql = "select count(*) from User where email = :email and pw = :pw";
Query q = HibernateUtil.getSession().createQuery(sql);
q.setParameter("email", user);
q.setParameter("pw", pw);
int count = ( (Integer) q.iterate().next() ).intValue();
return count > 0;
}
当我调用此方法时,我会收到一个例外User class is not mapped
。
为了解决这个问题,我创建了这个用户类:
import javax.persistence.*;
@Entity @Table(name = "user")
public class User
{
@Id @GeneratedValue
@Column(name = "id")
private Long id;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
}
在我的HibernateUtils.createSession
中,我添加了以下内容:
configuration.addClass(User.class);
然而,这给了我例外:
Caused by: org.hibernate.MappingNotFoundException: resource:
net/myProject/server/model/User.hbm.xml not found
at org.hibernate.cfg.Configuration.addResource(Configuration.java:741)
at org.hibernate.cfg.Configuration.addClass(Configuration.java:786)
at net.myProject.server.util.HibernateUtil.<clinit>(HibernateUtil.java:28)
我做错了什么?
答案 0 :(得分:17)
使用addAnnotatedClass
代替addClass
Configuration.addClass()
确实需要同伴hbm.xml
答案 1 :(得分:2)
似乎Hibernate正在寻找您的XML映射(XML文件),但您正在使用注释映射(Classes)。
如果您正在将Hibernate与Java Persistence API一起使用,则必须配置persistence.xml
文件,您可以在其中通知映射类的位置。
(如果您使用JPA,则不需要User.hbm.xml
文件。但如果不这样做,您可以在该XML文件中声明User的映射。您还需要使用{ {1}}说明你的映射在哪里。)
以下是hibernate.cfg.xml
文件的示例:
persistence.xml