• 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 为系统表

  • 相关阅读:
    python += 与=的区别
    django 使用框架下auth.models自带的User进行扩展增加字段
    基于服务器版centos7的Hadoop/spark搭建
    疑难汉字查询网
    中国地情网
    河南省高校社会科学研究信息网
    字由网站
    东方语言学
    北朝墓志地名查询
    子午书简——电子书网站
  • 原文地址:https://www.cnblogs.com/zyfxlv/p/3386281.html
Copyright © 2020-2023  润新知