hibernate: automatically generate timestamps

Discussion in 'Java' started by chrislewis, Oct 22, 2007.

  1. chrislewis

    chrislewis Guest

    Hello,

    I am trying to have certain values created/updated when a new record
    is created or an existing one is updated. I'm using the following
    field (using hibernate annotations as demonstrated in Hibernate In
    Action):

    @Column(updatable = false, insertable = false)
    @org.hibernate.annotations.Generated(
    org.hibernate.annotations.GenerationTime.INSERT
    )
    private Date created;

    Its simple; all I want is the 'created' field to be provided by
    hibernate as a timestamp for when it was created. Similarly, I want a
    timestamp field (named 'modified') to be updated whenever the record
    is changed. For that I have:

    @Column(updatable = false, insertable = false)
    @org.hibernate.annotations.Generated(
    org.hibernate.annotations.GenerationTime.ALWAYS
    )
    private Date modified;

    Unfortunately neither of these work. From the book as well as other
    documentation (the website), I can't see that I'm doing anything
    incorrectly, but the behavior I'm getting is that both of these fields
    are always null. Can anyone see what I've done wrong (or not doing)?

    Sincerely,
    Chris
     
    chrislewis, Oct 22, 2007
    #1
    1. Advertising

  2. chrislewis

    Daniel Pitts Guest

    chrislewis wrote:
    > Hello,
    >
    > I am trying to have certain values created/updated when a new record
    > is created or an existing one is updated. I'm using the following
    > field (using hibernate annotations as demonstrated in Hibernate In
    > Action):
    >
    > @Column(updatable = false, insertable = false)
    > @org.hibernate.annotations.Generated(
    > org.hibernate.annotations.GenerationTime.INSERT
    > )
    > private Date created;

    Just a guess here, have you tried using insertable = true? I don't know
    Hibernate that well though. The other (less preferred) alternative is
    to have a getter that checks if created==null then return new Date(),
    else return created. Then have hibernate persist using the getter, not
    the field.

    Good luck,
    Daniel.
    --
    Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
     
    Daniel Pitts, Oct 22, 2007
    #2
    1. Advertising

  3. chrislewis

    chrislewis Guest

    If I use insertable=true, hibernate throws an exception saying:

    "Cannot have @Generated property and insertable columns: ..." - so it
    appears that you must use insertable=false with @Generated, and the
    book (Hibernate In Action) states this as well. However it doesn't
    work as the book says it should, unless I'm just misunderstanding it.
    I know hibernate can do this - its a simple operation - I just can't
    figure out how...

    On Oct 22, 4:50 pm, Daniel Pitts
    <> wrote:
    > chrislewis wrote:
    > > Hello,

    >
    > > I am trying to have certain values created/updated when a new record
    > > is created or an existing one is updated. I'm using the following
    > > field (using hibernate annotations as demonstrated in Hibernate In
    > > Action):

    >
    > > @Column(updatable = false, insertable = false)
    > > @org.hibernate.annotations.Generated(
    > > org.hibernate.annotations.GenerationTime.INSERT
    > > )
    > > private Date created;

    >
    > Just a guess here, have you tried using insertable = true? I don't know
    > Hibernate that well though. The other (less preferred) alternative is
    > to have a getter that checks if created==null then return new Date(),
    > else return created. Then have hibernate persist using the getter, not
    > the field.
    >
    > Good luck,
    > Daniel.
    > --
    > Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
     
    chrislewis, Oct 22, 2007
    #3
  4. chrislewis

    Charles Guest

    On Oct 22, 8:12 am, chrislewis <> wrote:
    > Hello,
    >
    > I am trying to have certain values created/updated when a new record
    > is created or an existing one is updated. I'm using the following
    > field (using hibernate annotations as demonstrated in Hibernate In
    > Action):
    >
    > @Column(updatable = false, insertable = false)
    > @org.hibernate.annotations.Generated(
    > org.hibernate.annotations.GenerationTime.INSERT
    > )
    > private Date created;
    >
    > Its simple; all I want is the 'created' field to be provided by
    > hibernate as a timestamp for when it was created. Similarly, I want a
    > timestamp field (named 'modified') to be updated whenever the record
    > is changed. For that I have:
    >
    > @Column(updatable = false, insertable = false)
    > @org.hibernate.annotations.Generated(
    > org.hibernate.annotations.GenerationTime.ALWAYS
    > )
    > private Date modified;
    >
    > Unfortunately neither of these work. From the book as well as other
    > documentation (the website), I can't see that I'm doing anything
    > incorrectly, but the behavior I'm getting is that both of these fields
    > are always null. Can anyone see what I've done wrong (or not doing)?
    >
    > Sincerely,
    > Chris


    Hi,

    Can you give an example of the time value being created?

    Complete prototype of the time structure would be helpful.
     
    Charles, Oct 22, 2007
    #4
  5. chrislewis

    chrislewis Guest

    Its not, thats the problem. The Java type is java.util.Date, and
    hibernate is translating this to a SQL DATETIME column, which is
    perfect. The schema comes out fine, but anytime I create a new object
    with a 'created' field annotated as aforementioned, it always comes up
    null in the database. The expected behavior here is that hibernate
    should see it needs to initialize that field transparently on insert.

    I'm using MySQL 5x, for which the DATETIME format is 'YYYY-MM-DD
    HH:MM:SS'.

    Thanks for any input!

    On Oct 22, 5:22 pm, Charles <> wrote:
    > On Oct 22, 8:12 am, chrislewis <> wrote:
    >
    >
    >
    > > Hello,

    >
    > > I am trying to have certain values created/updated when a new record
    > > is created or an existing one is updated. I'm using the following
    > > field (using hibernate annotations as demonstrated in Hibernate In
    > > Action):

    >
    > > @Column(updatable = false, insertable = false)
    > > @org.hibernate.annotations.Generated(
    > > org.hibernate.annotations.GenerationTime.INSERT
    > > )
    > > private Date created;

    >
    > > Its simple; all I want is the 'created' field to be provided by
    > > hibernate as a timestamp for when it was created. Similarly, I want a
    > > timestamp field (named 'modified') to be updated whenever the record
    > > is changed. For that I have:

    >
    > > @Column(updatable = false, insertable = false)
    > > @org.hibernate.annotations.Generated(
    > > org.hibernate.annotations.GenerationTime.ALWAYS
    > > )
    > > private Date modified;

    >
    > > Unfortunately neither of these work. From the book as well as other
    > > documentation (the website), I can't see that I'm doing anything
    > > incorrectly, but the behavior I'm getting is that both of these fields
    > > are always null. Can anyone see what I've done wrong (or not doing)?

    >
    > > Sincerely,
    > > Chris

    >
    > Hi,
    >
    > Can you give an example of the time value being created?
    >
    > Complete prototype of the time structure would be helpful.
     
    chrislewis, Oct 22, 2007
    #5
  6. chrislewis

    JDurbin Guest

    On Oct 22, 7:12 am, chrislewis <> wrote:
    > Hello,
    >
    > I am trying to have certain values created/updated when a new record
    > is created or an existing one is updated. I'm using the following
    > field (using hibernate annotations as demonstrated in Hibernate In
    > Action):
    >
    > @Column(updatable = false, insertable = false)
    > @org.hibernate.annotations.Generated(
    > org.hibernate.annotations.GenerationTime.INSERT
    > )
    > private Date created;
    >
    > Its simple; all I want is the 'created' field to be provided by
    > hibernate as a timestamp for when it was created. Similarly, I want a
    > timestamp field (named 'modified') to be updated whenever the record
    > is changed. For that I have:
    >
    > @Column(updatable = false, insertable = false)
    > @org.hibernate.annotations.Generated(
    > org.hibernate.annotations.GenerationTime.ALWAYS
    > )
    > private Date modified;
    >
    > Unfortunately neither of these work. From the book as well as other
    > documentation (the website), I can't see that I'm doing anything
    > incorrectly, but the behavior I'm getting is that both of these fields
    > are always null. Can anyone see what I've done wrong (or not doing)?
    >
    > Sincerely,
    > Chris


    Chris. Have you found out what the issue is with @Generated using a
    create/modify timestamp? I am experiencing the exact-same thing you
    are. All the examples and docs make it seem so cut-'n-dry... thus, I
    cannot figure out what is going wrong.

    Thanks!

    --Josh
     
    JDurbin, Oct 29, 2007
    #6
  7. chrislewis

    Guest

    On Oct 28, 11:40 pm, JDurbin <> wrote:
    > On Oct 22, 7:12 am, chrislewis <> wrote:
    >
    >
    >
    > > Hello,

    >
    > > I am trying to have certain values created/updated when a new record
    > > is created or an existing one is updated. I'm using the following
    > > field (using hibernate annotations as demonstrated in Hibernate In
    > > Action):

    >
    > > @Column(updatable = false, insertable = false)
    > > @org.hibernate.annotations.Generated(
    > > org.hibernate.annotations.GenerationTime.INSERT
    > > )
    > > private Date created;

    >
    > > Its simple; all I want is the 'created' field to be provided by
    > > hibernate as a timestamp for when it was created. Similarly, I want a
    > > timestamp field (named 'modified') to be updated whenever the record
    > > is changed. For that I have:

    >
    > > @Column(updatable = false, insertable = false)
    > > @org.hibernate.annotations.Generated(
    > > org.hibernate.annotations.GenerationTime.ALWAYS
    > > )
    > > private Date modified;

    >
    > > Unfortunately neither of these work. From the book as well as other
    > > documentation (the website), I can't see that I'm doing anything
    > > incorrectly, but the behavior I'm getting is that both of these fields
    > > are always null. Can anyone see what I've done wrong (or not doing)?

    >
    > > Sincerely,
    > > Chris

    >
    > Chris. Have you found out what the issue is with @Generated using a
    > create/modify timestamp? I am experiencing the exact-same thing you
    > are. All the examples and docs make it seem so cut-'n-dry... thus, I
    > cannot figure out what is going wrong.
    >
    > Thanks!
    >
    > --Josh


    I am also having this problem and would be interested to hear an
    answer if anyone has got it
     
    , Nov 1, 2007
    #7
  8. chrislewis

    Jim Garrison Guest

    wrote:
    > On Oct 28, 11:40 pm, JDurbin <> wrote:
    >> On Oct 22, 7:12 am, chrislewis <> wrote:
    >>
    >>
    >>
    >>> Hello,
    >>> I am trying to have certain values created/updated when a new record
    >>> is created or an existing one is updated. I'm using the following
    >>> field (using hibernate annotations as demonstrated in Hibernate In
    >>> Action):
    >>> @Column(updatable = false, insertable = false)
    >>> @org.hibernate.annotations.Generated(
    >>> org.hibernate.annotations.GenerationTime.INSERT
    >>> )
    >>> private Date created;
    >>> Its simple; all I want is the 'created' field to be provided by
    >>> hibernate as a timestamp for when it was created. Similarly, I want a
    >>> timestamp field (named 'modified') to be updated whenever the record
    >>> is changed. For that I have:
    >>> @Column(updatable = false, insertable = false)
    >>> @org.hibernate.annotations.Generated(
    >>> org.hibernate.annotations.GenerationTime.ALWAYS
    >>> )
    >>> private Date modified;
    >>> Unfortunately neither of these work. From the book as well as other
    >>> documentation (the website), I can't see that I'm doing anything
    >>> incorrectly, but the behavior I'm getting is that both of these fields
    >>> are always null. Can anyone see what I've done wrong (or not doing)?
    >>> Sincerely,
    >>> Chris

    >> Chris. Have you found out what the issue is with @Generated using a
    >> create/modify timestamp? I am experiencing the exact-same thing you
    >> are. All the examples and docs make it seem so cut-'n-dry... thus, I
    >> cannot figure out what is going wrong.
    >>
    >> Thanks!
    >>
    >> --Josh

    >
    > I am also having this problem and would be interested to hear an
    > answer if anyone has got it
    >


    I filed a bug on this in June, but have received zero response
    from anybody at Hibernate. See
    http://opensource.atlassian.com/projects/hibernate/browse/HHH-2511

    Maybe if you would visit the bug and add your examples it might
    get a little visibility.
     
    Jim Garrison, Nov 7, 2007
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Ilias Lazaridis
    Replies:
    0
    Views:
    1,773
    Ilias Lazaridis
    Dec 27, 2004
  2. Replies:
    0
    Views:
    3,804
  3. jstorta
    Replies:
    1
    Views:
    11,847
  4. Eleanna Skouta
    Replies:
    2
    Views:
    8,507
    Arne Vajhøj
    Dec 9, 2008
  5. Amit Jain
    Replies:
    7
    Views:
    3,386
    Amit Jain
    Apr 27, 2009
Loading...

Share This Page