2012-08-07 221 views
0

我正在使用Hibernate进行数据库访问。我使用下面的查询在我的代码获取我需要的数据:在下面我用它SQL错误:933,SQLState:42000和ORA-00933:SQL命令未正确结束

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打破行

对这个问题有什么想法?

+0

'com.company.claims.participant.AbstractBeneficiary'是表名? – 2012-08-07 18:54:37

回答

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

0

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

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(); 

很显然,我做了一些重构更改过,但主要的变化是什么,我上面所述。尽管谢谢你的回应!

相关问题