zoukankan      html  css  js  c++  java
  • Hibernate 根据实体名称得到DB表名以及表对应的Sequence name

    DB: oracle 10g;

    entityName:com.signaldemand.flank.hibernate.model.实体名

    1. 根据实体名获取DB表相对应的表名

    Class<?> clazz = CrudServiceHelper.getClassForName(entityName);
    AbstractEntityPersister classMetadata = (AbstractEntityPersister)_sessionFactory.getClassMetadata(clazz);
    String tableName = classMetadata.getTableName();

     2.获取DB中所有的表sequence name

    SessionFactory sf = HibernateUtil.getInstance().getSf();
    Map mds = sf.getAllClassMetadata();
    for (Object entry : mds.entrySet()) {
    Entry en = (Entry) entry;
    EntityPersister ep = (EntityPersister) en.getValue();
    IdentifierGenerator idGen = ep.getIdentifierGenerator();
    if (idGen instanceof SequenceGenerator) {
    SequenceGenerator seqGen=(SequenceGenerator)idGen;
    seqGen.getSequenceName();//这里就得到sequenceName了。
    }
    }

    3. 一次性取出多个序列值(通常用在导入数据时,表如果有多条记录,先查询所要的sequence再进行设置id)

    select sequenceName.nextval from (select 1 from all_objects where rownum <= 100)

    标注:一个足够大的表,确保满足想获取的序列数量(表的数据量至少要有你想要的序列数量那么多)

    all_objects 为系统表

  • 相关阅读:
    Linux终端基本命令
    Markdown基本语法
    谷歌浏览器解决”此Flash Player与您的地区不相容“
    谷歌浏览器不可以默认允许flash的解决方法
    MySQL8.0登陆方式
    谷歌浏览器安装位置自定义
    java生成六位验证码
    对AJAX的理解
    对servlet请求的理解
    js60秒倒计时
  • 原文地址:https://www.cnblogs.com/zyfxlv/p/3386281.html
Copyright © 2011-2022 走看看