Skip to content

Instantly share code, notes, and snippets.

@fabiojose
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fabiojose/78da0116dedef573f792 to your computer and use it in GitHub Desktop.
Save fabiojose/78da0116dedef573f792 to your computer and use it in GitHub Desktop.
Persistence.Custom.Generator.Eclipselink
package com.domain.project;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.Map;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicInteger;
import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.internal.databaseaccess.Accessor;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.sequencing.Sequence;
import org.eclipse.persistence.sessions.Session;
public class CustomGenerator extends Sequence implements SessionCustomizer {
private static final long serialVersionUID = -909445778257599819L;
private static final Map<Object, AtomicInteger> SEQUENCERS = new Hashtable<Object, AtomicInteger>();
private static Serializable next(final Object object) {
AtomicInteger sequencer = SEQUENCERS.get(object);
if(null== sequencer) {
sequencer = new AtomicInteger( (int)System.currentTimeMillis() );
SEQUENCERS.put(object, sequencer);
}
return new Integer(sequencer.getAndIncrement());
}
public CustomGenerator(){
}
public CustomGenerator(String name) {
super(name);
}
@Override
public void customize(Session session) throws Exception {
Sequence sequence = new CustomGenerator(CustomGenerator.class.getName());
session.getLogin().addSequence(sequence);
}
@Override
public Object getGeneratedValue(Accessor accessor, AbstractSession session, String name) {
return CustomGenerator.next(name);
}
@SuppressWarnings("rawtypes")
@Override
public Vector getGeneratedVector(Accessor arg0, AbstractSession arg1,
String arg2, int arg3) {
return null;
}
@Override
public void onConnect() {
}
@Override
public void onDisconnect() {
}
@Override
public boolean shouldAcquireValueAfterInsert() {
return false;
}
@Override
public boolean shouldUseTransaction() {
return false;
}
@Override
public boolean shouldUsePreallocation() {
return false;
}
}

import

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

persistence.xml

<property name="eclipselink.session.customizer" value="com.domain.project.CustomGenerator"/>

usage

@Id
@GeneratedValue(generator = "com.domain.project.CustomGenerator", strategy = GenerationType.AUTO)
@Column(name = "entity_id", length = 10, nullable = false)
private int id;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment