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

Java SQL错误:933、SQLState:42000和ORA-00933:SQL命令未正确结束,java,sql,hibernate,hql,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 >

我正在使用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();
如果有关系,则使用
StringBuilder
构造查询,并使用
\n
中断行


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

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

createSQLQuery需要本机SQL。您使用的是类而不是表名。请尝试阅读以下内容:

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

select fu
from bar
where situation = 'snafu'
也许你真的想写一个namedQuery?它们使用ORM语法连接实体,就像您在示例中所做的那样

请查看以下示例:


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

createSQLQuery需要本机SQL。您使用的是类而不是表名。请尝试阅读以下内容:

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

select fu
from bar
where situation = 'snafu'
也许你真的想写一个namedQuery?它们使用ORM语法连接实体,就像您在示例中所做的那样

请查看以下示例:


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

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

好的,所以我使用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();
StringBuilder查询=新建StringBuilder();
query.append(“选择项目资产\n”+
“来自com.avivausa.claims.participant.abstractBene\n”+
“加入bene.approvals审批\n”+
“加入bene.proAsset proAsset\n”+
“加入proasset.additionalParties proassetparties\n”+
“其中approval.userDate

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

好的,所以我使用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();
StringBuilder查询=新建StringBuilder();
query.append(“选择项目资产\n”+
“来自com.avivausa.claims.participant.abstractBene\n”+
“加入bene.approvals审批\n”+
“加入bene.proAsset proAsset\n”+
“加入proasset.additionalParties proassetparties\n”+
“其中approval.userDate

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

com.company.claims.participant.abstract受益人
是表名吗?
com.company.claims.participant.abstract受益人
是表名吗?