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/fc4084ca9426dad1b5d0 to your computer and use it in GitHub Desktop.
Save fabiojose/fc4084ca9426dad1b5d0 to your computer and use it in GitHub Desktop.
Persistence.Custom.Generator.Hibernate
package com.domain.project;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;
public class CustomGenerator implements IdentifierGenerator {
private static final Map<Class<?>, AtomicInteger> SEQUENCERS = new Hashtable<Class<?>, AtomicInteger>();
private static Serializable next(final Object object) {
AtomicInteger sequencer = SEQUENCERS.get(object.getClass());
if(null== sequencer) {
sequencer = new AtomicInteger( (int)System.currentTimeMillis() );
SEQUENCERS.put(object.getClass(), sequencer);
}
return new Integer(sequencer.getAndIncrement());
}
@Override
public Serializable generate(SessionImplementor session, Object object) throws HibernateException {
return CustomGenerator.next(object);
}
}

import

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;

usage

@Id
@GenericGenerator(name="GEN_ID", strategy = "com.domain.project.CustomGenerator")
@GeneratedValue(generator = "GEN_ID", strategy = GenerationType.AUTO)
@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