I’m looking for a builder for HQL in Java. I want to get rid of things like:
StringBuilder builder = new StringBuilder() .append('select stock from ') .append( Stock.class.getName() ) .append( ' as stock where stock.id = ') .append( id );
I’d rather have something like:
HqlBuilder builder = new HqlBuilder() .select( 'stock' ) .from( Stock.class.getName() ).as( 'stock' ) .where( 'stock.id' ).equals( id );
I googled a bit, and I couldn’t find one.
I wrote a quick & dumb HqlBuilder that suits my needs for now, but I’d love to find one that has more users and tests than me alone.
Note: I’d like to be able to do things like this and more, which I failed to do with the Criteria API:
select stock from com.something.Stock as stock, com.something.Bonus as bonus where stock.someValue = bonus.id
ie. select all stocks whose property someValue points to any bonus from the Bonus table.
Thanks!
@Sébastien Rocca-Serra
Now we’re getting somewhere concrete. The sort of join you’re trying to do isn’t really possible through the Criteria API, but a sub-query should accomplish the same thing. First you create a
DetachedCriteriafor the bonus table, then use theINoperator forsomeValue.This is equivalent to
The only downside would be if you have references to different tables in
someValueand your ID’s are not unique across all tables. But your query would suffer from the same flaw.