[hibernate-dev] How to deal with a constant in CriteriaQuery
Steve Ebersole
steve at hibernate.org
Wed Apr 25 09:07:28 EDT 2018
We can propose it. Personally I do not think that section explicitly
precludes what we do, but I agree that it does imply the function
invocation should be "passed through". I think this might be difficult to
get consensus on though - just a quick look at EclipseLink and TopLink show
that they define a completely different mechanism for such "provider
treated" function calls (OPERATION rather than FUNCTION), so I doubt there
will be much support for changing the wording here. We'll see...
I think we should standardize a number of HQL functions beyond the JPA ones
across Dialects (we have Dialect coverage for many of these already):
- Date / Time (already standardized across Dialects)
- year
- month
- day
- hour
- minute
- second
- Date / Time (can be done through datetime arithmetic)
- datediff
- dateadd
- Convert / Cast
- to_char
- to_number
- to_date
- Trigonometry
- cos
- sin
- tan
- ...
As for other cases like "date field" where we need to be able to refer to
SQL-y things, we should add some kind of support for that generically imo.
This is something I've wanted to do for some time - I just don't know a
good syntax yet. I had thought to use braces (e.g. `extract( {day} from
startDate)`) but we use braces already for a few other things. We could
take a page from JDBC (escape syntax) and have `extract( {sql day} from
startDate)` - that makes it more syntactically understandable.
On Wed, Apr 25, 2018 at 1:51 AM Christian Beikov <christian.beikov at gmail.com>
wrote:
> Am 25.04.2018 um 00:46 schrieb Steve Ebersole:
> >
> >
> > On Tue, Apr 24, 2018 at 5:43 PM Christian Beikov
> > <christian.beikov at gmail.com <mailto:christian.beikov at gmail.com>> wrote:
> >
> > That's a possibility indeed, but there will most likely always be
> > some
> > nice function that uses a weird keyword syntax for which there is no
> > first class support.
> >
> >
> > And not only that but some databases allow extensions to the SQL spec
> > as to what can be extracted. So using an enum is nice, but limiting
> >
> > So even if we propose this, IMO we should still also propose to add a
> > note to the function invocation syntax section, that a function may
> > resolve to a JPA vendor defined funciton as well. This would be
> > like a
> > "last resort" to use a function at least in a "standard way". If
> > the JPA
> > vendor doesn't define the desired function, it's up to the user to
> > making use of JPA vendor specific APIs for registering the function.
> >
> >
> > I'm not sure what this means
> That means that section 4.6.17.3 should be changed to allow for
> FUNCTION('XYZ', arg1, ...) to resolve to a JPA vendor specific function
> like the ones registered in a Hibernate Dialect. To me it seems that
> currently the wording requires to pass this through to the SQL directly
> as XYZ(arg1). This would allow the use of user defined SQLFunctions
> through the JPA Criteria API.
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
More information about the hibernate-dev
mailing list