怎么生成 数字+字符的自增主键 hibernate+oracle-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

2016-03-04 11:46:40 1756 1

主键格式:
TID001
TID002
TID003
TID004

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

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

取消 提交回答
全部回答(1)
  • 爵霸
    2019-07-17 18:52:03

    解决方法:继承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");
        }
     
    }
    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144698浏览量 回答数 40

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 226092浏览量 回答数 162

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 336975浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 142448浏览量 回答数 13

110

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 295475浏览量 回答数 110

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 147214浏览量 回答数 22

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 646730浏览量 回答数 18

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 146027浏览量 回答数 31

42

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 136894浏览量 回答数 42

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 136456浏览量 回答数 10
+关注
2
文章
9426
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载