Hi Michael,

Michael Horwitz wrote:


On Dec 7, 2007 5:37 PM, Rob Hills <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Hi All,

    This is really a Hibernate column, but hopefully someone here will
    know
    more about it than I do, which wouldn't be hard.

    I have a model class that includes an attribute "departureTime" of
    type
    java.util.Date and the data contains both date and time
    information.  In
    my Dao class, I obtain a list of this object using Hibernate and I
    need
    to sort it by the date component of the data (ie excluding the time).

    I've read the Hibernate documentation on HQL and AFAICT, HQL supports
    expressions, but only in the Select part of the HQL.  In the
    section on
    "Order By", the documentation says that HQL will order a list "by any
    property of a returned class or component".  So, I created an
    @Transient
    attribute "departureDate" + getter, that returned just the date
    part of
    my data (in fact a string formatted to "yyyymmdd"), but that
    caused an
    exception to be raised "could not resolve property departureDate".


Perhaps a small ray of light: the bit on Hibernate supporting functions in the order by clause is in the next section of the document 14.12:

SQL functions and aggregate functions are allowed in the having and order by clauses, if supported by the underlying database (eg. not in MySQL).

So could be done as long as you are not using MySql?
Well, MySql is one of the databases I'm not using for this project, so that part's OK. Thanks for pointing out that little bit of the docco, I'd stopped reading at the end of the previous "Order By" paragraph :-( Because I'm trying to keep this "generic" HQL, I tried to incorporate an earlier section of that document (14.10) on expressions with something else I'd found in my searching that looked promising, the @Formula annotation. Unfortunately that hasn't worked. I tried defining a "departureDate" in my pojo with the following:

@Formula("year(departureTime) || month(departureTime) || day(departureTime)")
public String getDepartureDate() {...

But that gives me an error along the lines of "no such function year(Timestamp without timezone)". Having seen some examples of use of the Hibernate @Formula annotation, it looks like they want raw SQL there rather than HQL. Unfortunately, it is in handling and formatting of dates that different databases seem to be most divergent and I need to make this project as DB-agnostic as I can :-(

I may have to create a function to give me a sortable date string from a timestamp field. Now it would be nice if there were some way of defining that within Hibernate!

Cheers,
Rob Hills
Waikiki, Western Australia

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to