SQL错误:933,SQLState:42000和ORA-00933:SQL命令未正确结束

时间:2012-08-07 18:49:23

标签: java sql hibernate hql

我正在使用Hibernate进行数据库访问。我在我的代码中使用以下查询来获取我需要的数据:

SELECT proasset
FROM com.company.claims.participant.AbstractBeneficiary bene
JOIN bene.approvals approval
JOIN bene.proassetkey proasset
join proasset.relatedparties proassetparties
WHERE approval.user_dt > :currentDate
AND approval.user_type = :userType

我在下面将它用作query

Query q = this.getSessionFactory().getCurrentSession().createSQLQuery(query.toString())
q.setDate("currentDate", new Date());
q.setString("userType", APPROVER_USER_TYPE);
List<ProAsset> proassets = q.list();

但是,尝试运行时会遇到以下情况:

SQL Error: 933, SQLState: 42000
ORA-00933: SQL command not properly ended

如果重要,则使用StringBuilder构建查询,并使用\n来分隔行

对这个问题的任何想法?

3 个答案:

答案 0 :(得分:4)

看起来您正在尝试将ORM与本机(普通旧SQL)查询混合使用。

createSQLQuery需要本机SQL。您正在使用类而不是表名。试一试:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html

简而言之,您需要编写如下查询:

select fu
from bar
where situation = 'snafu'

也许你真的想写一个namedQuery?他们使用ORM语法来加入实体,就像您在示例中所做的那样。

检查这些例子:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#querysql-namedqueries

答案 1 :(得分:0)

通过删除不合适的子句来更正语法。可以使用另一个SQL语句复制已删除的子句。例如,要对视图的行进行排序,请在查询视图时进行,而不是在创建视图时进行。如果延续行缩进,则SQL * Forms应用程序中也会发生此错误。检查缩进行并删除这些空格。

答案 2 :(得分:0)

好吧,所以我使用createSQLQuery()而不是createQuery(),我使用的是列名而不是变量名。

以下是我的代码现在的样子:

StringBuilder query = new StringBuilder();

query.append("SELECT proasset\n" +
            "FROM com.avivausa.claims.participant.AbstractBeneficiary bene\n" +
            "JOIN bene.approvals approval\n" +
            "JOIN bene.proAsset proasset\n" +
            "join proasset.additionalParties proassetparties\n" +
            "WHERE approval.userDate < current_date()\n");
query.append("AND approval.userType = ").append(UserAuditType.APPROVER);

Query q = this.getSessionFactory().getCurrentSession().createQuery(query.toString());

List<ProAsset> proassets = q.list();

显然我也做了一些重构更改,但主要的变化是我上面所说的。感谢您的回复!