问题描述
我试图从users"表中获取所有用户的列表,但出现以下错误:
I'm trying to get a list of all the users from "users" table and I get the following error:
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)
这是我为添加/获取用户而编写的代码:
This is the code I wrote to add/get users:
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 函数时,我收到这些错误.
Adding users works, but when I use the getUsers function I get these error.
这是我的休眠配置文件:
This is my hibernate config file:
<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>
这是我的用户类:
@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;
}
...
}
知道为什么我会收到这个错误吗?
Any idea why I get this error?
推荐答案
在 HQL 中,您应该使用映射的 java 类名 和 属性名>@Entity
而不是实际的表名和列名,所以 HQL 应该是:
In the HQL , you should use the java class name and property name of the mapped @Entity
instead of the actual table name and column name , so the HQL should be :
List<User> result = session.createQuery("from User", User.class).getResultList();
更新:更准确地说,您应该使用@Entity
中配置的实体名称来引用表",默认为映射的java类的非限定名称 如果你没有明确设置它.
Update : To be more precise , you should use the entity name configured in @Entity
to refer to the "table" , which default to unqualified name of the mapped java class if you do not set it explicitly.
(P.S. 是 @javax.persistence.Entity
但不是 @org.hibernate.annotations.Entity
)
(P.S. It is @javax.persistence.Entity
but not @org.hibernate.annotations.Entity
)
这篇关于休眠错误 - QuerySyntaxException:用户未映射 [来自用户]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!