当前位置: 首页 > 面试题库 >

Hibernate错误-QuerySyntaxException:[未从用户映射用户]

祁烈
2023-03-14
问题内容

我试图从“用户”表中获取所有用户的列表,但出现以下错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: users is not mapped [from users]
org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93)

这是我编写的用于添加/获取用户的代码:

public List<User> getUsers() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    List<User> result = (List<User>) session.createQuery("from users").list();
    session.getTransaction().commit();
    return result;
}

public void addUser(User user) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    session.save(user);
    session.getTransaction().commit();
}

public void addUser(List<User> users) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    for (User user : users) {
        session.save(user);
    }
    session.getTransaction().commit();
}

添加用户是可行的,但是当我使用getUsers函数时,出现这些错误。

这是我的hibernate配置文件:

<hibernate-configuration>
<session-factory>
    <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.default_schema">test</property>
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

    <property name="show_sql">true</property>

    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">create-drop</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    <property name="current_session_context_class">thread</property>

    <!-- Mapping files will go here.... -->

    <mapping class="model.Company" />
    <mapping class="model.Conference" />
    <mapping class="model.ConferencesParticipants" />
    <mapping class="model.ConferenceParticipantStatus" />
    <mapping class="model.ConferencesUsers" />
    <mapping class="model.Location" />
    <mapping class="model.User" />

</session-factory>

这是我的User类:

@Entity
@Table( name = "Users" )
public class User implements Serializable{

    private long userID;
    private int pasportID;
    private Company company; 
    private String name;
    private String email;
    private String phone1;
    private String phone2;
    private String password; //may be null/empty , will be kept hashed
    private boolean isAdmin;
    private Date lastLogin;

    User() {} //not public on purpose!

    public User(int countryID, Company company, String name, String email,
            String phone1, String phone2, String password, boolean isAdmin) {
        this.pasportID = countryID;
        this.company = company;
        this.name = name;
        this.email = email;
        this.phone1 = phone1;
        this.phone2 = phone2;
        this.password = password;
        this.isAdmin = isAdmin;
    }

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    public long getUserID() {
        return userID;
    }
    public void setUserID(long userID) {
        this.userID = userID;
    }
    ...    
}

知道为什么我会收到此错误吗?


问题答案:

在HQL中,应使用映射的 Java类名属性名@Entity而不是实际的表名和列名,因此HQL应该为:

List<User> result = session.createQuery("from User", User.class).getResultList();

更新:更精确地说,您应该使用在中配置的实体名称@Entity来引用“表”,如果未明确设置,则默认为映射的 Java类的 非限定名称。

(PS是@javax.persistence.Entity但不是@org.hibernate.annotations.Entity



 类似资料:
  • 问题内容: 我试图从“用户”表中获取所有用户的列表,但出现以下错误: 这是我编写的用于添加/获取用户的代码: 添加用户是可行的,但是当我使用getUsers函数时,出现这些错误。 这是我的休眠配置文件: 这是我的User类: 知道为什么我会收到此错误吗? 问题答案: 在HQL中,应使用映射的 java类名 和 属性名 ,而不是实际的表名和列名,因此HQL应该为: 更新:更精确地说,您应该使用在中配

  • 问题内容: 我一直在研究一个非常简单的JPA示例,并试图将其调整为现有数据库。但是我无法克服这个错误。(下面。)这只是我没看到的一些简单的事情。 在下面的DocumentManager类中(一个简单的servlet,因为这是我的目标),它做了两件事: 插入一行 返回所有行 插入效果很好-一切都很好。问题出在检索上。我尝试了各种参数值,但没有走运,并且尝试了各种更复杂的类注释(如列类型),但都没有成

  • 我有一个产品数据库。我已经创建了一个简单的Hibernate项目来从数据库中检索所有的产品。但是,我在编译代码时出现了以下异常: 令人惊讶的是,将prodcuts添加到数据库中可以正常工作。

  • 我有2个数据库表。First在其中有交易。每个交易都有一个ID。这个ID也在我的第二个表中找到。第二个表包含收费,但我的第一个表没有有关收费的信息。现在我必须通过冬眠映射获得连接到1个交易的所有费用,但我不想有它在两个方向。 贸易类:

  • 我遇到了这种情况,当我在apache Tomcat中启动项目时,它生成异常:-Caused by:java.lang.IllegalArgumentException:方法public abstract java.lang.long Net.PetrikaInulainen.Spring.Social.SigninMVC.user.Repository.EventorePository.Count

  • 问题内容: 这是错误 我不明白为什么会引发此错误,应该对类进行映射,因为我将简要地向您展示。我有一个非常基本的配置,例如:http : //docs.jboss.org/hibernate/annotations/3.5/reference/en/html/ch01.html 我试图将映射定义添加到hibernate.cfg.xml中,并且还尝试以编程方式添加它。他们俩都没有工作。有人可以告诉我我