package com.aggrepoint.hibernate; import java.io.Serializable; import java.util.Properties; import org.hibernate.HibernateException; import org.hibernate.MappingException; import org.hibernate.dialect.Dialect; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.id.Configurable; import org.hibernate.id.IdentityGenerator; import org.hibernate.type.Type; /** * 若Object的主键值为空或为0,则使用IdentityGenerator生成主键值 * * @author Jim */ public class ZeroIdGenerator extends IdentityGenerator implements Configurable { private String entityName; @Override public Serializable generate(SessionImplementor session, Object obj) throws HibernateException { if (obj == null) throw new HibernateException(new NullPointerException()); final Serializable id = session.getEntityPersister(entityName, obj) .getIdentifier(obj, session); if (id == null || id.equals(0)) return super.generate(session, obj); return id; } @Override public void configure(Type type, Properties params, Dialect d) throws MappingException { entityName = params.getProperty(ENTITY_NAME); if (entityName == null) { throw new MappingException("no entity name"); } } }