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

  • 相关阅读:
    PerfDog
    adb 常用操作
    netstat命令(net-tools)
    资源路径总结:
    四个作用域对象:
    jsp的 九大内置对象
    Jsp 的语法和指令
    JSP 学习
    server.xml 文件:
    Web.xml 文件使用总结:
  • 原文地址:https://www.cnblogs.com/zyfxlv/p/3386281.html
Copyright © 2011-2022 走看看