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
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?

I would either recommend using PersistentDateTime and storing both the millis and the timezone, OR if you are always confident of the creator's timezone, create a custom Hibernate type that 1) creates a normal DateTime with the specified millis, then 2) converts it to the creator's local zone with "withZone()", then 3) converts it to a LocalDateTime.

Connor

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

Reply via email to