天天看點

Hibernate—根據實體類得到對應的表名、主鍵名、字段名

import java.util.Iterator;

import org.hibernate.cfg.Configuration;

import org.hibernate.mapping.Column;

import org.hibernate.mapping.PersistentClass;

import org.hibernate.mapping.Property;

import com.iman.gdms.ruledata.po.IntelligenceNetVPNAndSCP;

public class HibernateConfigurationHelper {

 private static Configuration hibernateConf;

 @SuppressWarnings("unused")

 private static Configuration getHibernateConf() {

  if (hibernateConf == null) {

   return new Configuration();

  }

  return hibernateConf;

 }

 @SuppressWarnings("unchecked")

 private static PersistentClass getPersistentClass(Class clazz) {

  synchronized (HibernateConfigurationHelper.class) {

   PersistentClass pc = getHibernateConf().getClassMapping(

     clazz.getName());

   if (pc == null) {

    hibernateConf = getHibernateConf().addClass(clazz);

    pc = getHibernateConf().getClassMapping(clazz.getName());

   }

   return pc;

  }

 }

 @SuppressWarnings("unchecked")

 public static String getTableName(Class clazz) {

  return getPersistentClass(clazz).getTable().getName();

 }

 @SuppressWarnings("unchecked")

 public static String getPkColumnName(Class clazz) {

  return getPersistentClass(clazz).getTable().getPrimaryKey()

    .getColumn(0).getName();

 }

 @SuppressWarnings("unchecked")

 public static String getColumnName(Class clazz, String propertyName) {

  PersistentClass persistentClass = getPersistentClass(clazz);

  Property property = persistentClass.getProperty(propertyName);

  Iterator it = property.getColumnIterator();

  if (it.hasNext()) {

   Column column = (Column) it.next();

   return column.getName();

  }

  return null;

 }

 public static void main(String[] args) {

  System.out.println(getTableName(IntelligenceNetVPNAndSCP.class));

  System.out.println(getColumnName(IntelligenceNetVPNAndSCP.class,

    "vsCode"));

 }

}