On Fri, 5 Oct 2018 at 14:40, Vlad Mihalcea <mihalcea.v...@gmail.com> wrote:
>
> Hi,
>
> My question was more about LocalTime, which is much more straightforward to 
> address than LocalDateTime in the context of time zones.

Ok so specifically discussing LocalTime.

If you *really must* store a LocalTime as an absolute timestamp then
using the "time_zone" configuration property sounds indeed like a
better than not ignoring it.

Yet my opinion - and what I believe many others here shared - is that
LocalTime should not be map to such a SQL type; it should map to a
different suitable type to represent "a description of the local time
as seen on a wall clock" (quoting the LocalTime javadoc), e.g. on
MySQL and PostgreSQL we map to TIME, not TIMESTAMP.

>
> For DateTime types which support timezones, I'll have to study to see what 
> other non-breaking alternatives we may have.
>
> Vlad
>
> On Fri, Oct 5, 2018 at 2:28 PM Steve Ebersole <st...@hibernate.org> wrote:
>>
>> Ah good, its time for this yearly discussion :D
>>
>> The problem is as Vlad points out.  We are kind of forced to do *something* 
>> wrt timezone to often times counteract what the JDBC driver will do.  As I 
>> have always contended, imo that saving a date into the database with any 
>> kind of timzone (other than UTC) is simply wrong.  I personally would never 
>> do it - and I think we've seen enough of the down sides to doing it.  As 
>> Sanne points out, storing epoch-based dates (Instant, etc) is always the 
>> best option
>>
>> One cool option would be an AttributeConverter that handles the timezone 
>> transformation, combined with telling Hibernate to always use UTC for the 
>> JDBC timezone
>>
>>
>> On Fri, Oct 5, 2018 at 4:44 AM Sanne Grinovero <sa...@hibernate.org> wrote:
>>>
>>> On Fri, 5 Oct 2018 at 10:28, Vlad Mihalcea <mihalcea.v...@gmail.com> wrote:
>>> >
>>> > Hi
>>> >
>>> > IMO no timezone conversion whatsoever should be applied when
>>> > > persisting LocalDateTime as it doesn't contain any TZ information.
>>> >
>>> >
>>> > That's not very easy to do since either the JDBC Driver or the database
>>> > engine might to the timezone conversion based on the underlying setting.
>>> >
>>> > In fact I'd even recommend to use a string-based column type to store
>>> > > LDT, as it avoids these kinds of issues altogether.
>>>
>>> +1 I think we need to enforce that. Mapping a Java type which is
>>> explicitly designed to be insensitive to TZ should not be stored into
>>> a type which is sensitive to it. That would otherwise defeat the
>>> purpose of using these specific types.
>>>
>>> If people really want to convert stuff, that's business logic. So that
>>> belong in the business layer: let them do explicit conversion in their
>>> own code before invoking the setter of an entity, that will also help
>>> to bring awareness on any conversion issue they might have.
>>>
>>> >
>>> >
>>> > Actually, a Long (BigInt) column type with the epoch would be more 
>>> > suitable
>>> > than a CHAR-based column since it's more compact and achieves the same 
>>> > goal.
>>> > However, many clients will not want to store Date/Time in Int or String
>>> > columns as explained in the following article:
>>>
>>> -1
>>>
>>> let's use Epoch based numerics for Java types which are based on
>>> Epoch. e.g. java.time.Instant.
>>>
>>> People can always transform a date into an epoch-independent number by
>>> simply encoding it as a number;
>>> e.g. "2018-10-31" -> 20181031 . I guess it could save you some bytes
>>> but I'd be skeptical on doing this automatically.
>>>
>>> >
>>> > https://www.periscopedata.com/blog/better-sql-schema
>>> >
>>> > Maybe introducing another value for "hibernate.jdbc.time_zone" ("as_is"?)
>>> > > that would also impact how we map timezone-less types, would be a good 
>>> > > idea?
>>> >
>>> >
>>> > We would have to introduce a new configuration property as a strategy 
>>> > where
>>> > the current behavior is "legacy"
>>> > while the new one must be explicitly enabled.
>>> >
>>> > Vlad
>>> >
>>> > On Fri, Oct 5, 2018 at 11:17 AM Yoann Rodiere <yo...@hibernate.org> wrote:
>>> >
>>> > > > In fact I'd even recommend to use a string-based column type to store
>>> > > > LDT, as it avoids these kinds of issues altogether.
>>> > >
>>> > > Or just, you know, "timestamp without timezone". Where possible.
>>> > >
>>> > > More to the point, I agree with Vlad's proposition, and I also think ORM
>>> > > should avoid messing with timezones as much as possible: when the user
>>> > > didn't provide one (LocalDate, LocalDateTime, Date), don't store one, 
>>> > > when
>>> > > he provided one (ZonedDateTime, OffsetDateTime, Calendar, ...), store it
>>> > > exactly as provided. The goal being to return the exact value that was
>>> > > persisted when later retrieving the data.
>>> > > But unfortunately I think there is a lot of legacy behaviors that differ
>>> > > from this, so any attempt at "fixing" it would break compatibility and 
>>> > > make
>>> > > someone angry.
>>> > >
>>> > > Maybe introducing another value for "hibernate.jdbc.time_zone" 
>>> > > ("as_is"?)
>>> > > that would also impact how we map timezone-less types, would be a good 
>>> > > idea?
>>> > >
>>> > >
>>> > > Yoann Rodière
>>> > > Hibernate NoORM Team
>>> > > yo...@hibernate.org
>>> > >
>>> > >
>>> > > On Fri, 5 Oct 2018 at 09:38, Gunnar Morling <gun...@hibernate.org> 
>>> > > wrote:
>>> > >
>>> > >> IMO no timezone conversion whatsoever should be applied when
>>> > >> persisting LocalDateTime as it doesn't contain any TZ information.
>>> > >>
>>> > >> If the target column type requires a TZ, it should be set to UTC,
>>> > >> storing the given value without any shift. I.e. the LDT value
>>> > >> 2007-12-03T10:15:30 should be stored as 2007-12-03T10:15:30@UTC, no
>>> > >> matter what's the VM's timezone or any TZ related config. This allows
>>> > >> to retrieve the original value later on, also if e.g. the loading VM
>>> > >> is in a different TZ.
>>> > >>
>>> > >> In fact I'd even recommend to use a string-based column type to store
>>> > >> LDT, as it avoids these kinds of issues altogether.
>>> > >>
>>> > >> --Gunnar
>>> > >>
>>> > >>
>>> > >>
>>> > >>
>>> > >>
>>> > >> Am Fr., 5. Okt. 2018 um 07:15 Uhr schrieb Vlad Mihalcea
>>> > >> <mihalcea.v...@gmail.com>:
>>> > >> >
>>> > >> > Hi,
>>> > >> > While reviewing this Jira issue:
>>> > >> >
>>> > >> > https://hibernate.atlassian.net/browse/HHH-12988
>>> > >> >
>>> > >> > and further discussing it via Twitter, I wonder if we should persist
>>> > >> > LocalTime as-is without any TimeZone transformation
>>> > >> > that may be done if we enable `hibernate.jdbc.time_zone`?
>>> > >> >
>>> > >> > According to the Date/Time API, LocalTime should not be relative to 
>>> > >> > any
>>> > >> > TimeZone.
>>> > >> >
>>> > >> > If we make this change, it means we need to use a LocalTime SQL
>>> > >> descriptor
>>> > >> > that ignores the jdbc.time_zone property,
>>> > >> > and the change is going to break compatibility as well.
>>> > >> >
>>> > >> > Vlad
>>> > >> > _______________________________________________
>>> > >> > hibernate-dev mailing list
>>> > >> > hibernate-dev@lists.jboss.org
>>> > >> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>> > >> _______________________________________________
>>> > >> hibernate-dev mailing list
>>> > >> hibernate-dev@lists.jboss.org
>>> > >> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>> > >>
>>> > >
>>> > _______________________________________________
>>> > hibernate-dev mailing list
>>> > hibernate-dev@lists.jboss.org
>>> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>>
>>> _______________________________________________
>>> hibernate-dev mailing list
>>> hibernate-dev@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev

_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to