package org.beanfuse.persist.hibernate; import java.util.Properties; import org.apache.commons.lang.StringUtils; import org.hibernate.dialect.Dialect; import org.hibernate.id.PersistentIdentifierGenerator; import org.hibernate.id.SequenceGenerator; import org.hibernate.id.enhanced.SequenceStyleGenerator; import org.hibernate.type.Type; /** * 按照表明进行命名序列<br> * 依据命名模式进行,默认模式{table}_{pk}_seq<br> * 该生成器可以 * * <pre> * 1)具有较好的数据库移植性,支持没有sequence的数据库。 * 2)可以通过设置优化起进行优化 * 3)可以按照表名进行自动命名序列名,模式{table}_{pk}_seq,默认命名规则seq_{table} * </pre> * * @author chaostone * */ public class TableNameSequenceGenerator extends SequenceStyleGenerator { /** 序列命名模式 */ private String sequencePattern = "seq_{table}"; // "{table}_{pk}_seq"; /** * If the parameters do not contain a {@link SequenceGenerator#SEQUENCE} * name, we assign one based on the table name. */ public void configure(Type type, Properties params, Dialect dialect) { if (StringUtils.isEmpty(params.getProperty(SEQUENCE_PARAM))) { String tableName = params.getProperty(PersistentIdentifierGenerator.TABLE); String pk = params.getProperty(PersistentIdentifierGenerator.PK); if (tableName != null) { String seqName = StringUtils.replace(sequencePattern, "{table}", tableName); seqName = StringUtils.replace(seqName, "{pk}", pk); params.setProperty(SEQUENCE_PARAM, seqName); } } super.configure(type, params, dialect); } public String getSequencePattern() { return sequencePattern; } public void setSequencePattern(String sequencePattern) { this.sequencePattern = sequencePattern; } }