I have provided custom and standard examples of sequence generators as shown below.
Use custom sequence identifier generator (EclipseLink only)
Define a user sequence class
package org.phstudy.sequence; public class MyNewIDSequence extends Sequence implements SessionCustomizer { private static final long serialVersionUID = -6308907478094680131L; public MyNewIDSequence() { super(); } public MyNewIDSequence(String name) { super(name); } public void customize(Session session) throws Exception { MyNewIDSequence sequence = new MyNewIDSequence("mynewid"); session.getLogin().addSequence(sequence); } @Override public Object getGeneratedValue(Accessor accessor, AbstractSession writeSession, String seqName) { DataReadQuery query = new DataReadQuery("select NEWID()"); query.setResultType(DataReadQuery.VALUE); return writeSession.executeQuery(query); } @Override public Vector getGeneratedVector(Accessor accessor, AbstractSession writeSession, String seqName, int size) { return null; } @Override public void onConnect() { } @Override public void onDisconnect() { } @Override public boolean shouldAcquireValueAfterInsert() { return false; } @Override public boolean shouldUsePreallocation() { return false; } @Override public boolean shouldUseTransaction() { return false; } }
Register custom sequence in persistence.xml file
<persistence ...> <persistence-unit ...> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <properties> ... <property name="eclipselink.session.customizer" value="org.phstudy.sequence.MyNewIDSequence"/> ... </persistence-unit> </persistence>
Add a sequence entry with a custom sequence name
@Entity public class CustomSequence { @Id @GeneratedValue(generator = "mynewid") private String id; ... }
Use default sequence identifier generator (JPA, EclipseLink, Hibernate)
Please enable automatic schema generation or create a table to store the identifier manually when using the Table , Sequence or IDENTITY Identifier Generation.
manual # 1. Enable automatic circuit creation
<persistence ...> <persistence-unit ...> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <properties> ... <property name="eclipselink.ddl-generation" value="create-tables"/> ... </persistence-unit> </persistence>
non-automatic # 2. Create a table to store the identifier manually
Identify Consistency in Your Organization
@SequenceGenerator(name="Emp_Gen", sequenceName="Emp_Seq") @Id @GeneratedValue(generator="Emp_Gen") private int getId;
SQL script to create a sequence
CREATE SEQUENCE Emp_Seq MINVALUE 1 START WITH 1 INCREMENT BY 50 //allocation size