关于java:org.springframework.orm.hibernate3.HibernateQueryException – HibernateTemplate

org.springframework.orm.hibernate3.HibernateQueryException - HibernateTemplate

我对HibernateTemplate有问题,不知道哪里出了问题。我使用的是Hibernate3和Tomcat6。在我的DAO中,我有一些函数尝试使用字符串查询数据库,它们看起来工作正常。这样地

1
2
3
4
5
6
7
8
9
10
11
public AppUser getUserByUserName(String username){
    HibernateTemplate template=new HibernateTemplate(sessionFactory);
    try{
        List<AppUser> appList = template.find(" from AppUser as au where au.username=?", username);
        tempUser = appList.get(0);  
        return tempUser;
    } catch(Exception e){
        System.out.println("Problem in AppUserDao--get byUsername:" + e.toString());
        return null;
    }
}

然而,当我尝试使用整数进行查询时。像:

1
2
3
4
5
6
7
8
9
10
11
12
13
public List<AppUser> getAllMerchants(){
    HibernateTemplate template=new HibernateTemplate(sessionFactory);
    try{
        List<AppUser> appList = template.find(" from appuser as au where au.securityLevel!=?", 112);
        if(appList.size() > 0)
            return appList;
        else
            return null;
    } catch(Exception e){
        System.out.println("Problem in AppUserDao--getAllMerchants:" + e.toString());
        return null;
    }
}

我得到这个错误:

1
org.springframework.orm.hibernate3.HibernateQueryException: appuser is not mapped [ from appuser as au where au.securityLevel!=?]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: appuser is not mapped [ from appuser as au where au.securityLevel!=?]

我的实体似乎有必要的注释。因为它适用于第一个函数,所以我不明白为什么它不适用于第二个函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
@Entity
@Table(name="appuser")
public class AppUser {
    private int id;
    private String username;
    private String password;
    private String firstName;
    private String secondName;
    private int state;
    private int securityLevel;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator="idSeq")
    @SequenceGenerator(name="idSeq",sequenceName="app_user_seq_id")
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }

    @Column(name="password_2")
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getSecondName() {
        return secondName;
    }
    public void setSecondName(String secondName) {
        this.secondName = secondName;
    }
    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;
    }
    public int getSecurityLevel() {
        return securityLevel;
    }
    public void setSecurityLevel(int securityLevel) {
        this.securityLevel = securityLevel;
    }

}


你的代码好像有错别字。在第一个函数中,您使用"from appuser",在第二个函数中使用"from appuser"。尝试将第二个查询更改为"from appuser"。


谢谢你的回答我意识到我们必须使用commandclass名称而不是在查询中使用表名称

1
return getHibernateTemplate().find("from ModuleCommand order by application");

modulecommand-命令类名称应用程序模块-表名。

在豆子里

1
2
3
4
5
6
7
<bean id="....
.
.
.
<property name="
commandClass" value="com.web.mon.thread.ModuleCommand" />
...
</bean>