org.hibernate.exception.SQLGrammarException:无法执行查询?

时间:2011-08-01 13:58:50

标签: sql hibernate

当我尝试使用NamedQuery获取列表时出现此异常:

org.hibernate.exception.SQLGrammarException: could not execute query

下面我提到了代码:

实体类代码:

@Table(name = "tbl_users")
@XmlRootElement
@NamedQueries({@NamedQuery(name = "TblUsers.findAll", query = "SELECT t FROM TblUsers t")});

DAO实施代码:

org.hibernate.Query query = session.getNamedQuery("TblUsers.findAll");
List list = query.list();

请为此例外提供解决方案。

5 个答案:

答案 0 :(得分:8)

暂时面临同样的问题,并发现问题是由于表名与数据库中的类(或实体)名称不同。添加了@Table(name = actual_table_name)注释并且它有效。

答案 1 :(得分:5)

获取Hibernate生成的SQL查询(使用hibernate.show_sql或最好是Hibernate的SQL logging),并自行对数据库执行。这很可能有助于引导你走向正确的方向。

答案 2 :(得分:0)

似乎这个问题有点老了,但是无论如何,只要我在下面的行中添加了休眠配置文件,它就对我有用。

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

答案 3 :(得分:0)

尝试此方法可能会起作用。 它对我来说是完美的。

1)类级别注释。

@NamedQuery(name="UserDetails.byId" , query="from UserDetails where userId = ?")

2)使用NamedQuery获取记录

Query qry2 = sf.getCurrentSession().getNamedQuery("USER_DETAILS.byName")    ;
        qry2.setString(0, "Angad Bansode");
        List<UserDetails> user = qry2.list();
        for (UserDetails userDetails : user) {
            System.out.println("User Details by named native query  name = " + userDetails.getUserName() + ", aadhaar no  = " + userDetails.getAadharNo());
        }

答案 4 :(得分:0)

对我来说,它缺少对自动递增主键序列的访问。添加此错误后已解决。

GRANT USAGE, SELECT ON ALL
    SEQUENCES IN SCHEMA public
    TO "${user-name}";;