0

我正在使用 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

如果重要的话,查询是使用 a 构造的StringBuilder,它用来\n换行

对这个问题有什么想法吗?

4

3 回答 3

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

于 2012-08-08T00:37:02.667 回答
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();

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

于 2012-08-08T15:03:06.440 回答
0

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

于 2012-08-08T05:34:36.833 回答