hibernate 自定义UUID(mysql uuid_short)

UUID生成类

 
 3 import org.apache.commons.logging.Log;
 4 import org.apache.commons.logging.LogFactory;
 5 import org.hibernate.HibernateException;
 6 import org.hibernate.MappingException;
 7 import org.hibernate.dialect.Dialect;
 8 import org.hibernate.engine.SessionImplementor;
 9 import org.hibernate.exception.JDBCExceptionHelper;
10 import org.hibernate.id.Configurable;
11 import org.hibernate.id.IdentifierGenerator;
12 import org.hibernate.type.Type;
13 
14 import java.io.Serializable;
15 import java.sql.PreparedStatement;
16 import java.sql.ResultSet;
17 import java.sql.SQLException;
18 import java.util.Properties;
19 
20 /**
21  * Created with IntelliJ IDEA.
22  * User: Administrator
23  * Date: 13-5-8
24  * Time: 下午6:15
25  * To change this template use File | Settings | File Templates.
26  */
27 public class ShortUUIDIncrementGenerator implements IdentifierGenerator, Configurable {
28     private static final Log log = LogFactory.getLog(ShortUUIDIncrementGenerator.class);
29     private final String sql = "select uuid_short()";
30 
31     @Override
32     public Serializable generate(SessionImplementor sessionImplementor, Object o) throws HibernateException {
33         synchronized (this) {
34             try {
35                 PreparedStatement st = sessionImplementor.getBatcher().prepareSelectStatement(sql);
36                 try {
37                     ResultSet rs = st.executeQuery();
38                     final long result;
39                     try {
40                         rs.next();
41                         result = rs.getLong(1);
42                     } finally {
43                         rs.close();
44                     }
45                     log.debug("GUID identifier generated: " + result);
46                     return result;
47                 } finally {
48                     sessionImplementor.getBatcher().closeStatement(st);
49                 }
50             } catch (SQLException e) {
51                 throw JDBCExceptionHelper.convert(
52                         sessionImplementor.getFactory().getSQLExceptionConverter(),
53                         e,
54                         "could not retrieve GUID",
55                         sql
56                 );
57             }
58         }
59     }
60 
61     @Override
62     public void configure(Type type, Properties properties, Dialect dialect) throws MappingException {
63         //To change body of implemented methods use File | Settings | File Templates.
64     }
65 
66 }

配置:

    @Id
    @GeneratedValue(generator = "shortUid")
    @GenericGenerator(name = "shortUid", strategy = "com.up72.msi.util.ShortUUIDIncrementGenerator")
    @Column(name = "id", unique = true, nullable = false, insertable = true, updatable = true, length = 19)
    public java.lang.Long getId() {
原文地址:https://www.cnblogs.com/xujj/p/3067479.html