在 Hibernate 中基于 Annotation 主键生成策略
首先show一个例子:
public class AssignedSequenceGenerator extends SequenceGenerator implements PersistentIdentifierGenerator, Configurable { private String entityName; public void configure(Type type, Properties params, Dialect dialect) throws MappingException { entityName = params.getProperty(ENTITY_NAME); if (entityName==null) { throw new MappingException("no entity name"); } super.configure(type, params, dialect); } public Serializable generate(SessionImplementor session, Object obj) throws HibernateException { Serializable id = session.getEntityPersister( entityName, obj ) .getIdentifier( obj, session.getEntityMode() ); if (id==null) { id = super.generate(session, obj); } return id; } }实际应用中,定义同sequence。
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy= "AssignedSequenceGenerator",
parameters = { @Parameter(name = "sequence", value= "seq_payablemoney") })