Jump to: navigation, search

Difference between revisions of "EclipseLink/UserGuide/JPA/Basic JPA Development/Entities/Ids/SequenceGenerator"

m (@SequenceGenerator Annotation)
 
(22 intermediate revisions by 3 users not shown)
Line 1: Line 1:
=@SequenceGenerator Annotation=
+
{{EclipseLink_UserGuide
If you use the [[EclipseLink/UserGuide/JPA/Basic JPA Development/Mapping/Entity/GeneratedValue|@GeneratedValue annotation]] to specify a primary key generator of type <tt>SEQUENCE</tt>, then you can use the <tt>@SequenceGenerator</tt> annotation to fine-tune this primary key generator to do the following:
+
|info=y
* change the allocation size to match your application requirements or database performance parameters;
+
|toc=n
 +
|eclipselink=y
 +
|eclipselinktype=JPA
 +
|api=y
 +
|apis=
 +
*[http://www.eclipse.org/eclipselink/api/latest/javax/persistence/GeneratedValue.html @GeneratedValue]
 +
*[http://www.eclipse.org/eclipselink/api/latest/javax/persistence/SequenceGenerator.html @SequenceGenerator]
 +
}}
 +
=@SequenceGenerator=
 +
If you use the [[EclipseLink/UserGuide/JPA/Basic JPA Development/Entities/Ids/GeneratedValue|<code>@GeneratedValue</code>]] annotation to specify a primary key generator of type <tt>SEQUENCE</tt>, then you can use the <tt>@SequenceGenerator</tt> annotation to fine-tune this primary key generator to do the following:
 +
* change the allocation size to match your application requirements or database performance parameters; (this should match your database sequence <code>INCREMENT</code>)
 
* change the initial value to match an existing data model (for example, if you are building on an existing data set for which a range of
 
* change the initial value to match an existing data model (for example, if you are building on an existing data set for which a range of
 +
{{EclipseLink_AttributeTable
 +
|caption=@SequenceGenerator Attributes
 +
|content=
 +
<tr>
 +
<td>'''<tt>name</tt>'''</td>
 +
<td>The name of the generator must match the name of a <tt>GeneratedValue</tt> with its <tt>strategy</tt> attribute set to <tt>SEQUENCE</tt>.</td>
 +
<td></td>
 +
<td>Yes</td>
 +
</tr>
 +
<tr>
 +
<td>'''<tt>allocationSize</tt>'''</td>
 +
<td>An <tt>int</tt> value that must match the increment size of the database sequence object.</td>
 +
<td>50</td>
 +
<td>No</td>
 +
</tr>
 +
<tr>
 +
<td>'''<tt>initialValue</tt>'''</td>
 +
<td>An <tt>int</tt> value to start all primary keys.</td>
 +
<td>0</td>
 +
<td>No</td>
 +
</tr>
 +
<tr>
 +
<td>'''<tt>sequenceName</tt>'''</td>
 +
<td>A <tt>String</tt> name of the sequence</td>
 +
<td><tt>SequenceGenerator.name</tt></td>
 +
<td>No</td>
 +
</tr>
 +
}}
  
  
The <tt>@SequenceGenerator</tt> annotation has the following attributes:
+
The following example shows how to use this annotation to specify the allocation size for the <tt>SEQUENCE</tt> primary key generator named <tt>Emp_Seq</tt>.
* <tt>name</tt> – The name of the generator must match the name of a <tt>GeneratedValue</tt> with its <tt>strategy</tt> attribute set to <tt>SEQUENCE</tt>.<br><br>You are required to specify the value of this attribute.
+
* <tt>allocationSize</tt> – By default, EclipseLink persistence provider uses an allocation size of 50.<br><br>The value of this attribute must match the increment size on the database sequence object. If this allocation size does not match your application requirements or database performance parameters, set this attribute to the <tt>int</tt> value you want.<br><br>You are not required to specify the value of the <tt>allocationSize</tt> attribute.
+
* <tt>initialValue</tt> – By default, EclipseLink persistence provider starts all primary key values from 0.<br>If this does not match an existing data model, set this attribute to the <tt>int</tt> value you want.<br><br>You are not required to specify the value of the <tt>initialValue</tt> attribute.
+
* <tt>sequenceName</tt> – By default, EclipseLink persistence provider assigns a sequence name of its own creation.<br><br>The <tt>sequenceName</tt> defaults to the name of the <tt>SequenceGenerator</tt>. If you prefer to use an existing or predefined sequence, set <tt>sequenceName</tt> to the <tt>String</tt> name you want.<br><br>You are not required to specify the value of the <tt>sequenceName</tt> attribute.
+
  
This example shows how to use this annotation to specify the allocation size for the <tt>SEQUENCE</tt> primary key generator named <tt>Cust_Seq</tt>.
+
======'' Example: @SequenceGenerator''======
 
+
<span id="Example 18-8"></span>
+
''''' Usage of @SequenceGenerator'''''
+
 
<source lang="java">
 
<source lang="java">
 
  @Entity
 
  @Entity
Line 20: Line 51:
 
     ...
 
     ...
 
     @Id
 
     @Id
     @SequenceGenerator(name="Cust_Seq", allocationSize=25)
+
     @SequenceGenerator(name="Emp_Seq", allocationSize=25)
     @GeneratorValue(strategy=SEQUENCE, generator="Cust_Seq")
+
     @GeneratorValue(strategy=SEQUENCE, generator="Emp_Seq")
     @Column(name="CUST_ID")
+
     @Column(name="EMP_ID")
 
     public Long getId() {
 
     public Long getId() {
 
         return id;
 
         return id;
Line 30: Line 61:
 
</source>
 
</source>
  
 +
======''Example: Using <code><nowiki><sequence-generator></nowiki></code>''======
  
For more information on the EclipseLink artifacts configured by these JPA metadata, refer to [[Introduction%20to%20Descriptors%20(ELUG)#Descriptors and Sequencing|Descriptors and Sequencing]].
+
<source lang="xml">
 +
<entity class="Employee">
 +
    <attributes>
 +
        <id name="id">
 +
            <column name="EMP_ID"/>
 +
            <generated-value generator="Emp_Seq" strategy="SEQUENCE"/>
 +
            <sequence-generator name="Emp_Seq" allocationSize="25"/>
 +
        </id>
 +
        ...
 +
    </attributes>
 +
</entity>
 +
</source>
  
  
  
 
{{EclipseLink_JPA
 
{{EclipseLink_JPA
|previous=[[EclipseLink/UserGuide/JPA/Basic JPA Development/Mapping/Entity/TableGenerator|@TableGenerator]]
+
|previous=[[EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/TableGenerator|@TableGenerator]]
|next=    [[EclipseLink/UserGuide/JPA/Basic JPA Development/Mapping/Basic_Mappings|Basic Mappings]]
+
|next=    [[EclipseLink/UserGuide/JPA/Basic JPA Development/Entities/Ids/UuidGenerator|@UuidGenerator]]
|up=      [[EclipseLink/UserGuide/JPA/Basic JPA Development/Mapping/Entity|Entity]]
+
|up=      [[EclipseLink/UserGuide/JPA/Basic JPA Development/Entities/Creating_and_Configuring_Entities|Configuring Entities]]
|version= 2.1.0
+
|version=2.2.0 DRAFT}}
}}
+

Latest revision as of 11:44, 28 June 2012

EclipseLink JPA

link="http://wiki.eclipse.org/EclipseLink"
EclipseLink
Website
Download
Community
Mailing ListForumsIRC
Bugzilla
Open
Help Wanted
Bug Day
Contribute
Browse Source

@SequenceGenerator

If you use the @GeneratedValue annotation to specify a primary key generator of type SEQUENCE, then you can use the @SequenceGenerator annotation to fine-tune this primary key generator to do the following:

  • change the allocation size to match your application requirements or database performance parameters; (this should match your database sequence INCREMENT)
  • change the initial value to match an existing data model (for example, if you are building on an existing data set for which a range of
@SequenceGenerator Attributes
Attribute Description Default Required?
name The name of the generator must match the name of a GeneratedValue with its strategy attribute set to SEQUENCE. Yes
allocationSize An int value that must match the increment size of the database sequence object. 50 No
initialValue An int value to start all primary keys. 0 No
sequenceName A String name of the sequence SequenceGenerator.name No


The following example shows how to use this annotation to specify the allocation size for the SEQUENCE primary key generator named Emp_Seq.

Example: @SequenceGenerator
 @Entity
 public class Employee implements Serializable {
     ...
     @Id
     @SequenceGenerator(name="Emp_Seq", allocationSize=25)
     @GeneratorValue(strategy=SEQUENCE, generator="Emp_Seq")
     @Column(name="EMP_ID")
     public Long getId() {
         return id;
     }
     ...
 }
Example: Using <sequence-generator>
<entity class="Employee">
    <attributes>
        <id name="id">
            <column name="EMP_ID"/>
            <generated-value generator="Emp_Seq" strategy="SEQUENCE"/>
            <sequence-generator name="Emp_Seq" allocationSize="25"/>
        </id>
        ...
    </attributes>
</entity>


Eclipselink-logo.gif
Version: 2.2.0 DRAFT
Other versions...