使用注释映射实体类时的Hibernate MappingNotFoundException

时间:2014-02-08 17:02:48

标签: java hibernate

我是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)

我做错了什么?

2 个答案:

答案 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