tags:

views:

169

answers:

1

I am learning JPA and have confusion in the @SequenceGenerator annotation.

Upto my understanding, it automatically assigns a value to numeric identity fields/properties of an entity.

Q1. Does this sequence generator make use of the database's increasing numeric value generating capability or generates the number on his own?

Q2. If JPA uses database auto increement feauture, then will it work with datastores that don't have auto increement feature?

Q3. If JPA generate numeric value on his own, then how the JPA implementation knows which value to generate next? Does it consult with the database first to see what value was stored last so as to generate the value (last + 1).

======================================================================================

Q4. Please also throw some light on sequenceName and allocationSize properties of @SequenceGenerator annotation.

+2  A: 

sequenceName is the name of the sequence in the DB. This is how you specify a sequence that already exists in the DB. If you go this route, you have to specify the allocationSize which needs to be the same value that the DB sequence uses as its "auto increment".

Usage:

@GeneratedValue(generator="my_seq")
@SequenceGenerator(name="my_seq",sequenceName="MY_SEQ", allocationSize=1)

If you want, you can let it create a sequence for you. But to do this, you must use SchemaGeneration to have it created. To do this, use:

@GeneratedValue(strategy=GenerationType.SEQUENCE)

Also, you can use the auto-generation, which will use a table to generate the IDs. You must also use SchemaGeneration at some point when using this feature, so the generator table can be created. To do this, use:

@GeneratedValue(strategy=GenerationType.AUTO)
Kevin Crowell