users@jpa-spec.java.net

[jpa-spec users] Re: Possibly make the TABLE-generated IDs available on @PrePersist?

From: Oliver Gierke <ogierke_at_pivotal.io>
Date: Tue, 16 Aug 2016 13:50:12 +0200

I see, that certainly makes sense. Generally speaking I don't see anything in the spec that should prevent implementors from behaving just the way you asked. Have you checked whether any of the persistence providers currently already behaves that way? I assume you might have more luck getting that feature implemented asking there first given that there's hardly any movement in JPA.next currently.

> Am 16.08.2016 um 13:24 schrieb Jin Kwon <jinahya_at_gmail.com>:
>
> @Oliver
> When GenerationType.TABLE used,
> AS should fetch and prepare some ID values (by TableGenerator#allocationSize) regardless entity lifecycle
> and assign one of them for each entity.
> That's the very different feature against IDENTITY/SEQUENCE which each has to insert first and read the engine-generated(assigned) value.
>
> On Tue, Aug 16, 2016 at 7:47 PM, Oliver Gierke <ogierke_at_pivotal.io> wrote:
> Hi Jin,
>
> I might be missing something obvious here but @PrePersist effectively implies *before* any database interaction. So how can the database generated be available at this time already?
>
> Cheers,
> Ollie
>
> > Am 09.08.2016 um 11:26 schrieb Jin Kwon <jinahya_at_gmail.com>:
> >
> > JSR338/3.5.3 specified that
> >
> > Generated primary key values are available in the PostPersist method.
> >
> > Is it possibly to specify TABLE-generated IDs available on PrePersist?
> >
> > e.g.
> > public class MyEntity {
> >
> > @PrePersist
> > private void onPrePersist() {
> > // make derived as a unique value derived from the id
> > derived = String.format("%016x", id);
> > }
> >
> > @GeneratedValue(..., strategy = GenerationType.TABLE)
> > @Id
> > private Long id;
> >
> > @Column(..., nullable = false, updatable = false)
> > private String derived;
> > }