[hibernate-dev] HQL + numeric literal typing

Steve Ebersole steve at hibernate.org
Mon Jan 11 11:23:40 EST 2010


I need to add a way to further define the type of numeric literals.
Currently HQL supports the use of the 'F', 'D' and 'L' suffixes as
defined by Java to demarcate floats, doubles and longs respectively.  I
find myself the need to do the same with BigInteger and BigDecimal.  

I see two options:

1) 2 new suffixes ( 'BI' and 'BD'? )
2) new escape syntax ( {as BigInteger 10000000} ? )

As a side note, I could in fact just use the CAST function as HQL does
support notion like CAST( 10000000 AS java.math.BigDecimal ).  However
that results in a SQL cast as well, and we get into potential issues
with "bad dialect setup".  Ideally I am just looking for a way to
identify the exact java type to use.

As an example of why this is important... The issue I ran into deals
with the JPA rules for determining query return types.  Take a
multiplication: JPA says that a multiplication that involves a
BigInteger as one of its operands should return a BigInteger.  So
consider "select some.attributePath * 10000000 ...".  If
'some.attributePath' is defined as Integer, this multiplication will
result in a Integer value because the '10000000' literal will also be
interpreted as Integer.

This can also be useful for parameters as well (although this whole
issue is generally related to select clauses and many databases have
well defined restrictions on using parameters in select, at least
without the explicit CAST so they know what types to expect).

So as far as an escape syntax, I guess the main question is how
generally useful this might be in other clauses and across other data
types.

Anyone else run across similar needs that would impact here?

-- 
Steve Ebersole <steve at hibernate.org>
Hibernate.org




More information about the hibernate-dev mailing list