修改自网络:http://blog.csdn.net/fhwbj/article/details/3267787
import java.util.Iterator;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.PrimaryKey;
import org.hibernate.mapping.Property;
/**
* 功能描述:根据实体类得到对应的表名、主键名、字段名工具类
* </p>
* 注:po类名须与对应映射文件名一致,即Student.java与Student.hbm.xml<br>
* //修改为主注解方式,此hbm文件已经不需要
*
*
* @Date:Nov 10, 2008
* @Time:3:13:07 PM
*
*/
public class EntityUtil {
private static Configuration hibernateConf;
private static Configuration getHibernateConf() {
if (hibernateConf == null) {
// hibernateConf=new Configuration();//*.hbm.xml方式
hibernateConf=new AnnotationConfiguration().configure();//注解方式
hibernateConf.buildSessionFactory();//注解方式必须的
}
return hibernateConf;
}
private static PersistentClass getPersistentClass(Class<?> clazz) {
synchronized (EntityUtil.class) {
PersistentClass pc = getHibernateConf().getClassMapping(
clazz.getName());
if (pc == null) {
// hibernateConf = getHibernateConf().addClass(clazz);//*.hbm.xml方式
pc = getHibernateConf().getClassMapping(clazz.getName());
}
return pc;
}
}
/**
* 功能描述:获取实体对应的表名
*
* @param clazz
* 实体类
* @return 表名
*/
public static String getTableName(Class<?> clazz) {
return getPersistentClass(clazz).getTable().getName();
}
/**
* 功能描述:获取实体对应表的主键字段名称,只适用于唯一主键的情况
*
* @param clazz
* 实体类
* @return 主键字段名称
*/
public static String getPrimaryKey(Class<?> clazz) {
return getPrimaryKeys(clazz).getColumn(0).getName();
}
/**
* 功能描述:获取实体对应表的主键字段名称
*
* @param clazz
* 实体类
* @return 主键对象primaryKey ,可用primaryKey.getColumn(i).getName()
*/
public static PrimaryKey getPrimaryKeys(Class<?> clazz) {
return getPersistentClass(clazz).getTable().getPrimaryKey();
}
/**
* 功能描述:通过实体类和属性,获取实体类属性对应的表字段名称
*
* @param clazz
* 实体类
* @param propertyName
* 属性名称
* @return 字段名称
*/
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;
}
}
hibernate.cfg.xml:需要这个文件,这是唯一的缺点。
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/managerdb</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/shop</property> <property name="connection.username">root</property> <property name="connection.password">ynb</property> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> --> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">10</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="hbm2ddl.auto">update</property> <!-- <mapping package="pp.entity"/> --> <mapping class="pp.entity.Department"/> <mapping class="pp.entity.Element"/> <mapping class="pp.entity.Employee"/> <mapping class="pp.entity.EmployeeType"/> <mapping class="pp.entity.Goods"/> <mapping class="pp.entity.GoodsType"/> <mapping class="pp.entity.GoodsFactoryType"/> <mapping class="pp.entity.ProductAssembleRecord"/> <mapping class="pp.entity.PersonalInfo"/> <mapping class="pp.entity.Product"/> <mapping class="pp.entity.SalaryType"/> <mapping class="pp.entity.Storage"/> <!-- <mapping class="pp.entity.StoreroomKeeper"/> --> <mapping class="pp.entity.CheckRecord"/> <mapping class="pp.entity.CheckRecordType"/> <mapping class="pp.entity.EncourageRecord"/> <mapping class="pp.entity.EncourageRecordType"/> <mapping class="pp.entity.MonthSalaryRecord"/> <mapping class="pp.entity.MonthSalaryType"/> <mapping class="pp.entity.MonthSalary"/> <mapping class="pp.entity.StorageRecord"/> <mapping class="pp.entity.TradeRecord"/> <mapping class="pp.entity.TradeRecordType"/> <mapping class="pp.entity.FundRecordType"/> <mapping class="pp.entity.FundRecord"/> <mapping class="pp.entity.Fund"/> <mapping class="pp.entity.SalaryCareInfo"/> <mapping class="pp.entity.StaticInfo"/> <mapping class="pp.entity.SaleAchievementTakePercent"/> <mapping class="pp.entity.ProductionRecord"/> <!-- <mapping class="pp.entity.EmployeeProductionRecord"/> <mapping class="pp.entity.DepartmentProductionRecord"/> --> <mapping class="pp.entity.ProductionRecordType"/> <mapping class="pp.entity.TestEntity"/> </session-factory> </hibernate-configuration>