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 為系統表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM