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/13163bd488d986e7af11 to your computer and use it in GitHub Desktop.
Save fabiojose/13163bd488d986e7af11 to your computer and use it in GitHub Desktop.
Persistence.Custom.Generator.OpenJPA
package com.domain.project;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.openjpa.kernel.Seq;
import org.apache.openjpa.kernel.StoreContext;
import org.apache.openjpa.meta.ClassMetaData;
public class CustomGenerator implements Seq {
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());
}
private static Serializable current(final Object object) {
AtomicInteger sequencer = SEQUENCERS.get(object);
if(null!= sequencer) {
return new Integer(sequencer.get());
}
return null;
}
@Override
public void allocate(int arg0, StoreContext arg1, ClassMetaData arg2) {
}
@Override
public void close() {
}
@Override
public Object current(StoreContext context, ClassMetaData meta) {
return CustomGenerator.current(meta.getDescribedType());
}
@Override
public Object next(StoreContext context, ClassMetaData meta) {
return CustomGenerator.next(meta.getDescribedType());
}
@Override
public void setType(int type) {
}
}

import

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

usage

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