当我尝试使用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();
请为此例外提供解决方案。
答案 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}";;