You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by yu wang <wa...@gmail.com> on 2012/06/18 11:31:32 UTC

Timestamp precision question.

Hello,
I am using OpenJPA 1.2.2 connecting oracle DB.
For Timestamp field, the precision is always millisecond level after
the filed is persisted into DB, regardless of I print the timestampe
filed in java, its precision is microsecond level.
Any specific configuration I am not aware of?

Below is a sample:
	@Basic()
	@Column(name="LOGTIME")
	public java.sql.Timestamp getLogtime() {
		return this.logtime;
	}
	@Override
	public void setLogtime(java.sql.Timestamp logtime) {
		this.logtime = logtime;
	}

Regards,
Yu Wang

Re: Timestamp precision question.

Posted by Kevin Sutter <kw...@gmail.com>.
Correct.

On Wed, Jun 20, 2012 at 8:56 PM, yu wang <wa...@gmail.com> wrote:

> Kevin,
> So if I need nanosecond, the Date precision should be 1,right?
>
> Regards,
> Yu Wang
>
> On Wed, Jun 20, 2012 at 9:28 PM, Kevin Sutter <kw...@gmail.com> wrote:
> > Good to hear, Yu!
> >
> > It's kind of strange, but the base units used for timestamps are
> > Nanoseconds.  So, the DatePrecision specifies what multiplier to use to
> get
> > the desired precision.  Multiply Nanos by 1000 and you get Micros.  The
> > default value for DatePrecision is 1000000, which then translates to
> Millis.
> >
> > Kevin
> >
> > On Wed, Jun 20, 2012 at 4:54 AM, yu wang <wa...@gmail.com> wrote:
> >
> >> Kevin,
> >> It does work. Thanks! By the way, what does "DatePrecision=1000" mean?
> Why
> >> 1000?
> >>
> >> Regards,
> >> Yu Wang
> >>
> >>
> >> On Tue, Jun 19, 2012 at 10:04 PM, Kevin Sutter <kw...@gmail.com>
> wrote:
> >> > Thanks, Yu, for the clarification.
> >> >
> >> > By default, OpenJPA uses Millisecond precision on the date fields
> (least
> >> > common denominator).  Some of the data dictionaries have been updated
> to
> >> > Microsecond (DB2, Postgres, etc) or even Nanosecond (Ingres).  It
> looks
> >> > like the Oracle dictionary is still using the default Millisecond
> >> > precision.  You can easily update this by modifying the Oracle
> dictionary
> >> > as follows:
> >> >
> >> > <property name="openjpa.jdbc.DBDictionary"
> >> value="oracle(DatePrecision=1000)"/>
> >> >
> >> > If this does the trick for you and you feel that the default precision
> >> for
> >> > the Oracle dictionary should be Microseconds, please file a JIRA [1].
> >> >
> >> > Thanks, Kevin
> >> >
> >> > [1]  http://openjpa.apache.org/found-a-bug.html
> >> >
> >> > On Mon, Jun 18, 2012 at 11:24 PM, yu wang <wa...@gmail.com> wrote:
> >> >
> >> >> Kevin
> >> >> Before the field is persisted, I use toString() method of Timestamp
> >> >> object to print the value of the field, its precision is microsecond.
> >> >> But when I read the Timestamp field from DB, its precision is
> >> millisecond.
> >> >>
> >> >> I need the precision of this Timestamp filed is microsecond. I am
> >> >> using ORacle DB and I can insert microsecond Timestamp filed into DB
> >> >> by SQL directly.
> >> >>
> >> >> Thanks,
> >> >> Yu Wang
> >> >>
> >> >> On Mon, Jun 18, 2012 at 9:43 PM, Kevin Sutter <kw...@gmail.com>
> >> wrote:
> >> >> > Hi Yu,
> >> >> > Can you clarify your request?    You said that your Timestamp
> fields
> >> are
> >> >> > persisted to the DB at a millisecond level.  But, I'm not following
> >> your
> >> >> > "print" comments and microsecond precision level.  After retrieved
> >> from
> >> >> the
> >> >> > DB, are the Timestamps still at a millisecond precision?  Or, are
> you
> >> >> > looking to store the Timestamp to the DB at a microsecond
> precision?
> >> >> > Various databases have different practices as it comes to Timestamp
> >> >> > precision.  If you could clarify what your expectations are, maybe
> >> >> > something can be figured out.  Thanks.
> >> >> >
> >> >> > Kevin
> >> >> >
> >> >> > On Mon, Jun 18, 2012 at 4:31 AM, yu wang <wa...@gmail.com>
> wrote:
> >> >> >
> >> >> >> Hello,
> >> >> >> I am using OpenJPA 1.2.2 connecting oracle DB.
> >> >> >> For Timestamp field, the precision is always millisecond level
> after
> >> >> >> the filed is persisted into DB, regardless of I print the
> timestampe
> >> >> >> filed in java, its precision is microsecond level.
> >> >> >> Any specific configuration I am not aware of?
> >> >> >>
> >> >> >> Below is a sample:
> >> >> >>        @Basic()
> >> >> >>        @Column(name="LOGTIME")
> >> >> >>        public java.sql.Timestamp getLogtime() {
> >> >> >>                return this.logtime;
> >> >> >>        }
> >> >> >>        @Override
> >> >> >>        public void setLogtime(java.sql.Timestamp logtime) {
> >> >> >>                this.logtime = logtime;
> >> >> >>        }
> >> >> >>
> >> >> >> Regards,
> >> >> >> Yu Wang
> >> >> >>
> >> >>
> >>
>

Re: Timestamp precision question.

Posted by yu wang <wa...@gmail.com>.
Kevin,
So if I need nanosecond, the Date precision should be 1,right?

Regards,
Yu Wang

On Wed, Jun 20, 2012 at 9:28 PM, Kevin Sutter <kw...@gmail.com> wrote:
> Good to hear, Yu!
>
> It's kind of strange, but the base units used for timestamps are
> Nanoseconds.  So, the DatePrecision specifies what multiplier to use to get
> the desired precision.  Multiply Nanos by 1000 and you get Micros.  The
> default value for DatePrecision is 1000000, which then translates to Millis.
>
> Kevin
>
> On Wed, Jun 20, 2012 at 4:54 AM, yu wang <wa...@gmail.com> wrote:
>
>> Kevin,
>> It does work. Thanks! By the way, what does "DatePrecision=1000" mean? Why
>> 1000?
>>
>> Regards,
>> Yu Wang
>>
>>
>> On Tue, Jun 19, 2012 at 10:04 PM, Kevin Sutter <kw...@gmail.com> wrote:
>> > Thanks, Yu, for the clarification.
>> >
>> > By default, OpenJPA uses Millisecond precision on the date fields (least
>> > common denominator).  Some of the data dictionaries have been updated to
>> > Microsecond (DB2, Postgres, etc) or even Nanosecond (Ingres).  It looks
>> > like the Oracle dictionary is still using the default Millisecond
>> > precision.  You can easily update this by modifying the Oracle dictionary
>> > as follows:
>> >
>> > <property name="openjpa.jdbc.DBDictionary"
>> value="oracle(DatePrecision=1000)"/>
>> >
>> > If this does the trick for you and you feel that the default precision
>> for
>> > the Oracle dictionary should be Microseconds, please file a JIRA [1].
>> >
>> > Thanks, Kevin
>> >
>> > [1]  http://openjpa.apache.org/found-a-bug.html
>> >
>> > On Mon, Jun 18, 2012 at 11:24 PM, yu wang <wa...@gmail.com> wrote:
>> >
>> >> Kevin
>> >> Before the field is persisted, I use toString() method of Timestamp
>> >> object to print the value of the field, its precision is microsecond.
>> >> But when I read the Timestamp field from DB, its precision is
>> millisecond.
>> >>
>> >> I need the precision of this Timestamp filed is microsecond. I am
>> >> using ORacle DB and I can insert microsecond Timestamp filed into DB
>> >> by SQL directly.
>> >>
>> >> Thanks,
>> >> Yu Wang
>> >>
>> >> On Mon, Jun 18, 2012 at 9:43 PM, Kevin Sutter <kw...@gmail.com>
>> wrote:
>> >> > Hi Yu,
>> >> > Can you clarify your request?    You said that your Timestamp fields
>> are
>> >> > persisted to the DB at a millisecond level.  But, I'm not following
>> your
>> >> > "print" comments and microsecond precision level.  After retrieved
>> from
>> >> the
>> >> > DB, are the Timestamps still at a millisecond precision?  Or, are you
>> >> > looking to store the Timestamp to the DB at a microsecond precision?
>> >> > Various databases have different practices as it comes to Timestamp
>> >> > precision.  If you could clarify what your expectations are, maybe
>> >> > something can be figured out.  Thanks.
>> >> >
>> >> > Kevin
>> >> >
>> >> > On Mon, Jun 18, 2012 at 4:31 AM, yu wang <wa...@gmail.com> wrote:
>> >> >
>> >> >> Hello,
>> >> >> I am using OpenJPA 1.2.2 connecting oracle DB.
>> >> >> For Timestamp field, the precision is always millisecond level after
>> >> >> the filed is persisted into DB, regardless of I print the timestampe
>> >> >> filed in java, its precision is microsecond level.
>> >> >> Any specific configuration I am not aware of?
>> >> >>
>> >> >> Below is a sample:
>> >> >>        @Basic()
>> >> >>        @Column(name="LOGTIME")
>> >> >>        public java.sql.Timestamp getLogtime() {
>> >> >>                return this.logtime;
>> >> >>        }
>> >> >>        @Override
>> >> >>        public void setLogtime(java.sql.Timestamp logtime) {
>> >> >>                this.logtime = logtime;
>> >> >>        }
>> >> >>
>> >> >> Regards,
>> >> >> Yu Wang
>> >> >>
>> >>
>>

Re: Timestamp precision question.

Posted by Kevin Sutter <kw...@gmail.com>.
Good to hear, Yu!

It's kind of strange, but the base units used for timestamps are
Nanoseconds.  So, the DatePrecision specifies what multiplier to use to get
the desired precision.  Multiply Nanos by 1000 and you get Micros.  The
default value for DatePrecision is 1000000, which then translates to Millis.

Kevin

On Wed, Jun 20, 2012 at 4:54 AM, yu wang <wa...@gmail.com> wrote:

> Kevin,
> It does work. Thanks! By the way, what does "DatePrecision=1000" mean? Why
> 1000?
>
> Regards,
> Yu Wang
>
>
> On Tue, Jun 19, 2012 at 10:04 PM, Kevin Sutter <kw...@gmail.com> wrote:
> > Thanks, Yu, for the clarification.
> >
> > By default, OpenJPA uses Millisecond precision on the date fields (least
> > common denominator).  Some of the data dictionaries have been updated to
> > Microsecond (DB2, Postgres, etc) or even Nanosecond (Ingres).  It looks
> > like the Oracle dictionary is still using the default Millisecond
> > precision.  You can easily update this by modifying the Oracle dictionary
> > as follows:
> >
> > <property name="openjpa.jdbc.DBDictionary"
> value="oracle(DatePrecision=1000)"/>
> >
> > If this does the trick for you and you feel that the default precision
> for
> > the Oracle dictionary should be Microseconds, please file a JIRA [1].
> >
> > Thanks, Kevin
> >
> > [1]  http://openjpa.apache.org/found-a-bug.html
> >
> > On Mon, Jun 18, 2012 at 11:24 PM, yu wang <wa...@gmail.com> wrote:
> >
> >> Kevin
> >> Before the field is persisted, I use toString() method of Timestamp
> >> object to print the value of the field, its precision is microsecond.
> >> But when I read the Timestamp field from DB, its precision is
> millisecond.
> >>
> >> I need the precision of this Timestamp filed is microsecond. I am
> >> using ORacle DB and I can insert microsecond Timestamp filed into DB
> >> by SQL directly.
> >>
> >> Thanks,
> >> Yu Wang
> >>
> >> On Mon, Jun 18, 2012 at 9:43 PM, Kevin Sutter <kw...@gmail.com>
> wrote:
> >> > Hi Yu,
> >> > Can you clarify your request?    You said that your Timestamp fields
> are
> >> > persisted to the DB at a millisecond level.  But, I'm not following
> your
> >> > "print" comments and microsecond precision level.  After retrieved
> from
> >> the
> >> > DB, are the Timestamps still at a millisecond precision?  Or, are you
> >> > looking to store the Timestamp to the DB at a microsecond precision?
> >> > Various databases have different practices as it comes to Timestamp
> >> > precision.  If you could clarify what your expectations are, maybe
> >> > something can be figured out.  Thanks.
> >> >
> >> > Kevin
> >> >
> >> > On Mon, Jun 18, 2012 at 4:31 AM, yu wang <wa...@gmail.com> wrote:
> >> >
> >> >> Hello,
> >> >> I am using OpenJPA 1.2.2 connecting oracle DB.
> >> >> For Timestamp field, the precision is always millisecond level after
> >> >> the filed is persisted into DB, regardless of I print the timestampe
> >> >> filed in java, its precision is microsecond level.
> >> >> Any specific configuration I am not aware of?
> >> >>
> >> >> Below is a sample:
> >> >>        @Basic()
> >> >>        @Column(name="LOGTIME")
> >> >>        public java.sql.Timestamp getLogtime() {
> >> >>                return this.logtime;
> >> >>        }
> >> >>        @Override
> >> >>        public void setLogtime(java.sql.Timestamp logtime) {
> >> >>                this.logtime = logtime;
> >> >>        }
> >> >>
> >> >> Regards,
> >> >> Yu Wang
> >> >>
> >>
>

Re: Timestamp precision question.

Posted by yu wang <wa...@gmail.com>.
Kevin,
It does work. Thanks! By the way, what does "DatePrecision=1000" mean? Why 1000?

Regards,
Yu Wang


On Tue, Jun 19, 2012 at 10:04 PM, Kevin Sutter <kw...@gmail.com> wrote:
> Thanks, Yu, for the clarification.
>
> By default, OpenJPA uses Millisecond precision on the date fields (least
> common denominator).  Some of the data dictionaries have been updated to
> Microsecond (DB2, Postgres, etc) or even Nanosecond (Ingres).  It looks
> like the Oracle dictionary is still using the default Millisecond
> precision.  You can easily update this by modifying the Oracle dictionary
> as follows:
>
> <property name="openjpa.jdbc.DBDictionary" value="oracle(DatePrecision=1000)"/>
>
> If this does the trick for you and you feel that the default precision for
> the Oracle dictionary should be Microseconds, please file a JIRA [1].
>
> Thanks, Kevin
>
> [1]  http://openjpa.apache.org/found-a-bug.html
>
> On Mon, Jun 18, 2012 at 11:24 PM, yu wang <wa...@gmail.com> wrote:
>
>> Kevin
>> Before the field is persisted, I use toString() method of Timestamp
>> object to print the value of the field, its precision is microsecond.
>> But when I read the Timestamp field from DB, its precision is millisecond.
>>
>> I need the precision of this Timestamp filed is microsecond. I am
>> using ORacle DB and I can insert microsecond Timestamp filed into DB
>> by SQL directly.
>>
>> Thanks,
>> Yu Wang
>>
>> On Mon, Jun 18, 2012 at 9:43 PM, Kevin Sutter <kw...@gmail.com> wrote:
>> > Hi Yu,
>> > Can you clarify your request?    You said that your Timestamp fields are
>> > persisted to the DB at a millisecond level.  But, I'm not following your
>> > "print" comments and microsecond precision level.  After retrieved from
>> the
>> > DB, are the Timestamps still at a millisecond precision?  Or, are you
>> > looking to store the Timestamp to the DB at a microsecond precision?
>> > Various databases have different practices as it comes to Timestamp
>> > precision.  If you could clarify what your expectations are, maybe
>> > something can be figured out.  Thanks.
>> >
>> > Kevin
>> >
>> > On Mon, Jun 18, 2012 at 4:31 AM, yu wang <wa...@gmail.com> wrote:
>> >
>> >> Hello,
>> >> I am using OpenJPA 1.2.2 connecting oracle DB.
>> >> For Timestamp field, the precision is always millisecond level after
>> >> the filed is persisted into DB, regardless of I print the timestampe
>> >> filed in java, its precision is microsecond level.
>> >> Any specific configuration I am not aware of?
>> >>
>> >> Below is a sample:
>> >>        @Basic()
>> >>        @Column(name="LOGTIME")
>> >>        public java.sql.Timestamp getLogtime() {
>> >>                return this.logtime;
>> >>        }
>> >>        @Override
>> >>        public void setLogtime(java.sql.Timestamp logtime) {
>> >>                this.logtime = logtime;
>> >>        }
>> >>
>> >> Regards,
>> >> Yu Wang
>> >>
>>

Re: Timestamp precision question.

Posted by Kevin Sutter <kw...@gmail.com>.
Thanks, Yu, for the clarification.

By default, OpenJPA uses Millisecond precision on the date fields (least
common denominator).  Some of the data dictionaries have been updated to
Microsecond (DB2, Postgres, etc) or even Nanosecond (Ingres).  It looks
like the Oracle dictionary is still using the default Millisecond
precision.  You can easily update this by modifying the Oracle dictionary
as follows:

<property name="openjpa.jdbc.DBDictionary" value="oracle(DatePrecision=1000)"/>

If this does the trick for you and you feel that the default precision for
the Oracle dictionary should be Microseconds, please file a JIRA [1].

Thanks, Kevin

[1]  http://openjpa.apache.org/found-a-bug.html

On Mon, Jun 18, 2012 at 11:24 PM, yu wang <wa...@gmail.com> wrote:

> Kevin
> Before the field is persisted, I use toString() method of Timestamp
> object to print the value of the field, its precision is microsecond.
> But when I read the Timestamp field from DB, its precision is millisecond.
>
> I need the precision of this Timestamp filed is microsecond. I am
> using ORacle DB and I can insert microsecond Timestamp filed into DB
> by SQL directly.
>
> Thanks,
> Yu Wang
>
> On Mon, Jun 18, 2012 at 9:43 PM, Kevin Sutter <kw...@gmail.com> wrote:
> > Hi Yu,
> > Can you clarify your request?    You said that your Timestamp fields are
> > persisted to the DB at a millisecond level.  But, I'm not following your
> > "print" comments and microsecond precision level.  After retrieved from
> the
> > DB, are the Timestamps still at a millisecond precision?  Or, are you
> > looking to store the Timestamp to the DB at a microsecond precision?
> > Various databases have different practices as it comes to Timestamp
> > precision.  If you could clarify what your expectations are, maybe
> > something can be figured out.  Thanks.
> >
> > Kevin
> >
> > On Mon, Jun 18, 2012 at 4:31 AM, yu wang <wa...@gmail.com> wrote:
> >
> >> Hello,
> >> I am using OpenJPA 1.2.2 connecting oracle DB.
> >> For Timestamp field, the precision is always millisecond level after
> >> the filed is persisted into DB, regardless of I print the timestampe
> >> filed in java, its precision is microsecond level.
> >> Any specific configuration I am not aware of?
> >>
> >> Below is a sample:
> >>        @Basic()
> >>        @Column(name="LOGTIME")
> >>        public java.sql.Timestamp getLogtime() {
> >>                return this.logtime;
> >>        }
> >>        @Override
> >>        public void setLogtime(java.sql.Timestamp logtime) {
> >>                this.logtime = logtime;
> >>        }
> >>
> >> Regards,
> >> Yu Wang
> >>
>

Re: Timestamp precision question.

Posted by yu wang <wa...@gmail.com>.
Kevin
Before the field is persisted, I use toString() method of Timestamp
object to print the value of the field, its precision is microsecond.
But when I read the Timestamp field from DB, its precision is millisecond.

I need the precision of this Timestamp filed is microsecond. I am
using ORacle DB and I can insert microsecond Timestamp filed into DB
by SQL directly.

Thanks,
Yu Wang

On Mon, Jun 18, 2012 at 9:43 PM, Kevin Sutter <kw...@gmail.com> wrote:
> Hi Yu,
> Can you clarify your request?    You said that your Timestamp fields are
> persisted to the DB at a millisecond level.  But, I'm not following your
> "print" comments and microsecond precision level.  After retrieved from the
> DB, are the Timestamps still at a millisecond precision?  Or, are you
> looking to store the Timestamp to the DB at a microsecond precision?
> Various databases have different practices as it comes to Timestamp
> precision.  If you could clarify what your expectations are, maybe
> something can be figured out.  Thanks.
>
> Kevin
>
> On Mon, Jun 18, 2012 at 4:31 AM, yu wang <wa...@gmail.com> wrote:
>
>> Hello,
>> I am using OpenJPA 1.2.2 connecting oracle DB.
>> For Timestamp field, the precision is always millisecond level after
>> the filed is persisted into DB, regardless of I print the timestampe
>> filed in java, its precision is microsecond level.
>> Any specific configuration I am not aware of?
>>
>> Below is a sample:
>>        @Basic()
>>        @Column(name="LOGTIME")
>>        public java.sql.Timestamp getLogtime() {
>>                return this.logtime;
>>        }
>>        @Override
>>        public void setLogtime(java.sql.Timestamp logtime) {
>>                this.logtime = logtime;
>>        }
>>
>> Regards,
>> Yu Wang
>>

Re: Timestamp precision question.

Posted by Kevin Sutter <kw...@gmail.com>.
Hi Yu,
Can you clarify your request?    You said that your Timestamp fields are
persisted to the DB at a millisecond level.  But, I'm not following your
"print" comments and microsecond precision level.  After retrieved from the
DB, are the Timestamps still at a millisecond precision?  Or, are you
looking to store the Timestamp to the DB at a microsecond precision?
Various databases have different practices as it comes to Timestamp
precision.  If you could clarify what your expectations are, maybe
something can be figured out.  Thanks.

Kevin

On Mon, Jun 18, 2012 at 4:31 AM, yu wang <wa...@gmail.com> wrote:

> Hello,
> I am using OpenJPA 1.2.2 connecting oracle DB.
> For Timestamp field, the precision is always millisecond level after
> the filed is persisted into DB, regardless of I print the timestampe
> filed in java, its precision is microsecond level.
> Any specific configuration I am not aware of?
>
> Below is a sample:
>        @Basic()
>        @Column(name="LOGTIME")
>        public java.sql.Timestamp getLogtime() {
>                return this.logtime;
>        }
>        @Override
>        public void setLogtime(java.sql.Timestamp logtime) {
>                this.logtime = logtime;
>        }
>
> Regards,
> Yu Wang
>