Hello,

I'm sure this problem comes down to me not fully groking the JPA way:
Using OpenJPA (2.0.1), how do I get a call to persist() to automatically
populate non-nullable, non-key fields whose values are generated by the
database? Here are the particulars:

DDL:
        modified     timestamp  not null  default current_timestamp,

Entity:
        @Temporal (TemporalType.TIMESTAMP)
        @Column (insertable=false, updatable=false)
        private Calendar modified;

Relevant JPA Property:
        openjpa.AutoDetach=close,commit,nontx-read

Databases:
        PostgreSQL 8.4, Derby 10.8

Test (which fails):
        ...{set fields, but not 'modified'}...
        et = em.getTransaction();
        et.begin();
        em.persist(entity);
        et.commit();
        assertNotNull(entity.getModified());

A query on the table, of course, shows a value for modified.

Some things I've tried that haven't worked:
      * Immediately after persist, entity.getModified();
      * Immediately after persist, em.refresh(entity);

On a possibly related note, I'm puzzled as to why I'm seeing the
following message when I run my tests despite the fact that I'm running
the enhancer on my domain classes via the openjpa-maven-plugin
(codehaus):

        INFO   [main] openjpa.Enhance - You have enabled runtime
        enhancement, but have not specified the set of persistent
        classes. ...

I've inspected the .class file and it has a pcGetmodified among other
things. So it looks like the classes are indeed getting enhanced.

Any insights? Do I need a post processor to populate 'modified'?


Reply via email to