How can I use MySQL assign operator(:=) in hibernate native query?

Sanghyun Lee picture Sanghyun Lee · Feb 27, 2012 · Viewed 13.1k times · Source

I'm using Hibernate. I wrote some native query because I need to use sub select statement.

Query looks like this:

SELECT sub.rownum FROM 
    (SELECT k.`news_master_id` AS id, @row := @row + 1 AS rownum 
        FROM keyword_news_list k 
        JOIN (SELECT @row := 0) r 
        WHERE k.`keyword_news_id` = :kid
    ORDER BY k.`news_master_id` ASC) AS sub 
WHERE sub.id  = :nid

When I run this query like this:

sessionFactory.getCurrentSession()
    .createSQLQuery(query)
    .setParameter("kid", kid)
    .setParameter("nid", nid)
    .uniqueResult();

This exception comes out:

org.hibernate.QueryException: Space is not allowed after parameter prefix ':' ....

This might because of := operator. I found some Hibernate issue about this. This issue is still open. Isn't there any solution for this problem?

Answer

Ondra Žižka picture Ondra Žižka · Jul 29, 2012

Note that HHH-2697 is now fixed for Hibernate 4.1.3 You can now escape with backslash:

SELECT k.`news_master_id` AS id, @row \:= @row + 1 AS rownum 
    FROM keyword_news_list k 
    JOIN (SELECT @row \:= 0) r 
    WHERE k.`keyword_news_id` = :kid
ORDER BY k.`news_master_id` ASC