[ 
https://issues.apache.org/jira/browse/OPENJPA-2453?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Heath Thomann resolved OPENJPA-2453.
------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.2.2
                   2.4.0
                   2.3.1
                   2.2.1.1
                   2.1.2

> Add support to retain milliseconds of 'un-rounded' Date field.
> --------------------------------------------------------------
>
>                 Key: OPENJPA-2453
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2453
>             Project: OpenJPA
>          Issue Type: Improvement
>    Affects Versions: 2.2.1, 2.3.0
>            Reporter: Heath Thomann
>            Assignee: Heath Thomann
>            Priority: Minor
>             Fix For: 2.1.2, 2.2.1.1, 2.3.1, 2.4.0, 2.2.2
>
>
> Take the following Entity:
> public class TemporalEntity {
> @Id
> private Integer id;
> @Temporal(TemporalType.TIMESTAMP)
> private java.util.Date testDate;
> .....
> Take this row in the DB (Timestamp is used in the DB):
> ID            TESTDATE
> 1        2010-01-01 12:00:00.687701
> Using a Date, I can not directly get the fractional seconds (i.e. .687701).  
> However, I can use a formatter as follows and the milliseconds will be 
> printed:
> TemporalEntity t = em.find(TemporalEntity.class, 1);
> SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
> System.out.println("sdf.format(t.getTestDate()) = " + 
> sdf.format(t.getTestDate()).toString());
> E.g:
> sdf.format(t.getTestDate()) = 2010-01-01 12:00:00.688
> Notice that the milliseconds are rounded.  OpenJPA rounds the milliseconds by 
> default.  This rounding was not desirable by some users.  For example, take 
> the insert of this data:
> INSERT INTO TemporalEntity (Id, testDate) VALUES(1, '9999-12-31 
> 23:59:59.9999')
> The Date inserted into the DB is .1 milliseconds from the next day of the 
> next year.  When a query is performed on this row, OpenJPA rounds the Date to 
> the nearest millisecond which means the Date seen by the user represents the 
> next day and year.  A while back we added a system property 
> ('roundTimeToMillisec', via OPENJPA-2159) to OpenJPA to allow the 
> milliseconds to be stripped off and thus avoid the rounding.  So we avoid 
> rounding, but in doing so the milliseconds are completely removed when the 
> property is set.   For example, when roundTimeToMillisec=false, the above 
> date of '9999-12-31 23:59:59.9999' will not be rounded up.  HOWEVER, the .999 
> will be stripped off.  So, take our String format example above, the output 
> would be:
> sdf.format(t.getTestDate()) = 2010-01-01 12:00:00.000
> A user may find it desirable to avoid the rounding, but may not like the fact 
> that .688 is removed.
> This JIRA will be used to allow a user to avoid rounding of milliseconds, but 
> will allow the milliseconds to be retained.
> Thanks,
> Heath Thomann



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to