hibernate獲取所有表名(mapping)
hibernate升級到5.x時丟棄了一部分相關的api,目前網上版本眾多,從外網上找到了一個能用的。別的看不懂。
轉載 https://codingtechroom.com/question/how-to-retrieve-all-table-names-from-sessionfactory-in-hibernate
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.mapping.Table;
import java.util.Set;
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
.configure().build();
Metadata metaData = new MetadataSources(standardRegistry)
.buildMetadata();
sessionFactory = metaData.buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void listTableNames() {
Set<Table> tables = sessionFactory.getStatistics().getEntityNames();
for (Table table : tables) {
System.out.println(table.getName());
}
}
}
另外這個頁面幫助比較大(將 Hibernate 從 4.3.x 遷移到 5.x,針對方法 org.hibernate.cfg.Configuration.getClassMapping(className)):
https://dev59.com/P1wY5IYBdhLWcg3wTWMu
其中的這篇回答:
在Hibernate 5中,可以像這樣初始化元數據:
URL configFileURL = getResource(); //some method to get hold of the location of your hibernate.cfg.xml
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure(configFileURL).build();
Metadata metaData = new MetadataSources(standardRegistry).getMetadataBuilder().build();
并使用元數據上的getEntityBindings()
Collection<PersistentClass> entityBindings = metadata.getEntityBindings();
Iterator<PersistentClass> iterator = entityBindings.iterator();
while (iterator.hasNext()) {
PersistentClass persistentClass = iterator.next();
//do somthing
}

浙公網安備 33010602011771號