Thanks for your reply, Connor.  In regards to the point you raised,

> To answer one of your questions below, I think there IS an implication that
>
> LocalDateTime occurs in the local time zone of the client that creates it

If this is the case, then why allow the user to create an instance of
LocalDateTime which is not valid in their default time zone?  It's
kind of an unforeseen gotcha when a user is allowed by Joda time to
create the instance, but not to persist it to a database.  Perhaps the
user was using LocalDateTime to represent times in UTC, while they are
in a different time zone. I know this might not be proper application
of LocalDateTime, but it seems like something a user might do. Or,
perhaps a user is using the LocalDateTime class to store instants that
are truly agnostic of any time zone data (this is how I have always
thought of LocalDateTime).

> I may be misunderstanding, but:
> In order to use setTimestamp(int index, Timestamp x, Calendar cal), you will
> need to know what cal to pass in - and this cal would always be the local
> time zone of the client that created it, right? So how are you going to
> recover that in the future, if it's simply stored in the database as a
> single millis value?

To properly persist any value of a LocalDateTime that a user might
create, a time zone that has no daylight saving time is necessary; UTC
seems like a good time zone to use for the calendar. The value could
be retrieved from the database in the same way one would retrieve a
UTC instant. I might be oversimplifying this though.  I have not yet
had a chance to spend more time looking into this.

>
> Stephen Colebourne wrote:
>
> I'm afraid I'm not a hibernate expert, so unless anyone else comments,
> its up to you to figure it out ;-)
> Stephen
>
> D.M. wrote:
>
>
> I've been digging through the hibernate source files trying to see how
> this can be handled. Somebody with more experience may correct me if
> I'm wrong, but it appears that the Hibernate.TIMESTAMP.nullSafeSet
> method invoked by PersistentLocalDateTime eventually calls
> org.hibernate.type.TimestampType.set(PreparedStatement st, Object
> value, int index), where value is either a java.sql.Timestamp, or an
> object castable to java.util.Date. This method calls
> st.setTimestamp(int index, Timestamp x).
>
> Is it possible that this can be fixed by extending
> org.hibernate.types.TimestampType, and
> overriding the set method so that it instead calls st.setTimestamp(int
> index, Timestamp x, Calendar cal), using the Calendar to relate the
> time zone to use?
>
> On Thu, Mar 12, 2009 at 6:56 PM, Stephen Colebourne
> <scolebou...@joda.org> wrote:
>
>
> The conversion from LocalDateTime to the database form is going via
> DateTime, which is using the time zone.
>
> Ideally PersistentLocalDateTime should handle this, although exactly
> what it should do is open to question.
>
> Stephen
>
>
> D.M. wrote:
>
>
> When attempting to save a LocalDateTime to the database, I am
> receiving an error (included below).  My database is Oracle 10g, in
> UTC.  My java client is 1.6+, and is running in U.S. Central time
> zone.  The time which fails to insert is LocalDateTime(2008,3,9,2,30).
>  This time, in the local time zone of the java client, exists in the
> DST cutover where 2:00 becomes 3:00. When toDateTime() is called from
> within PersistentLocalDateTime.nullSafeSet(), the instant cannot be
> created because that instant does not exist in the U.S. Central time
> zone.
>
> So, is this behaving as intended, or is it a bug? The description of
> LocalDateTime from the javadoc is "a datetime without a time zone".
> Is there an additional implication (as the name of the class would
> seem to indicate) that the LocalDateTime occurs in the local time zone
> of the client that creates it?  Or should a client be able to save a
> LocalDateTime object to the database that represents a local time
> somewhere other than the client's default time zone?
>
> The error is:
> java.lang.IllegalArgumentException: Illegal instant due to time zone
> offset transition: 2008-03-09T08:30:00.000
>         at
> org.joda.time.chrono.ZonedChronology.localToUTC(ZonedChronology.java:143)
>         at
> org.joda.time.chrono.ZonedChronology.getDateTimeMillis(ZonedChronology.java:119)
>         at
> org.joda.time.chrono.AssembledChronology.getDateTimeMillis(AssembledChronology.java:133)
>         at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:254)
>         at org.joda.time.DateTime.<init>(DateTime.java:293)
>         at org.joda.time.LocalDateTime.toDateTime(LocalDateTime.java:634)
>         at org.joda.time.LocalDateTime.toDateTime(LocalDateTime.java:619)
>         at
> org.joda.time.contrib.hibernate.PersistentLocalDateTime.nullSafeSet(PersistentLocalDateTime.java:99)
>         at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:146)
>         at
> org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1997)
>         at
> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2243)
>         at
> org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
>         at
> org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
>         at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
>         at
> org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
>         at
> org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
>         at
> org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
>         at
> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
>         at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
>         at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
>         at
> org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
>
> ------------------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>
>
>
> ------------------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>
>
>
> ------------------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>
>
>
> ------------------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>
>
> ------------------------------------------------------------------------------
> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
> easily build your RIAs with Flex Builder, the Eclipse(TM)based development
> software that enables intelligent coding and step-through debugging.
> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>
>

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

Reply via email to