开发者社区> 问答> 正文

怎么生成 数字+字符的自增主键 hibernate+oracle

主键格式:
TID001
TID002
TID003
TID004

查了一下hibernate的主键策略 貌似没有可以这样的

请问 这个只能自己去控制吗,每次生成的ID的时候 去数据库里查一把?

展开
收起
爵霸 2016-03-04 11:46:40 2303 0
1 条回答
写回答
取消 提交回答
  • 解决方法:继承IdentifierGenerator,Configurable 这2个接口

    package com.testplatform.idGenerator;
     
    import java.io.Serializable;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Properties;
     
     
    import org.apache.log4j.Logger;
    import org.hibernate.HibernateException;
    import org.hibernate.MappingException;
    import org.hibernate.dialect.Dialect;
    import org.hibernate.engine.SessionImplementor;
    import org.hibernate.id.Configurable;
    import org.hibernate.id.IdentifierGenerator;
    import org.hibernate.type.Type;
     
     
    public class IDGenerator implements IdentifierGenerator,Configurable {
     
        private String prefix;
        private String seq;
        static Logger log4j = Logger.getLogger(IDGenerator.class.getClass());
        public Serializable generate(SessionImplementor session, Object arg1)
                throws HibernateException {
            // TODO Auto-generated method stub
             
             Connection connection = session.connection();
                try {
                    //SELECT seq_date_info_id.nextval from dual;
                    PreparedStatement ps = connection
                            .prepareStatement("SELECT "+seq+".nextval from dual");
     
                    ResultSet rs = ps.executeQuery();
                    if (rs.next()) {
                        int id = rs.getInt("nextval");
                        String code = prefix+id;
                        //String code = prefix + StringUtils.leftPad("" + id,3, '0');
                        log4j.warn("IDGenerator: " + code);
                        return code;
                    }
     
                } catch (SQLException e) {
                    log4j.warn(e);
                    throw new HibernateException(
                            "Unable to generate id ");
                }
            return null;
        }
        public void configure(Type arg0, Properties params, Dialect arg2)
                throws MappingException {
            // TODO Auto-generated method stub
    //        System.out.println("configure");
    /*        table = params.getProperty("table");
              if (table == null)
               table = params.getProperty(PersistentIdentifierGenerator.TABLE);*/
              seq = params.getProperty("seq");
              prefix = params.getProperty("prefix");
        }
     
    }
    2019-07-17 18:52:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
Oracle云上最佳实践 立即下载

相关实验场景

更多

相关镜像