hibernate 获取实体的表名、主键名、列名
修改自网络: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>?
?
?
?
?
1 楼 369485270 2012-03-20 楼主在吗 你这个注解方式根本就不行 报错啊 org.hibernate.HibernateException: /hibernate.cfg.xml not found 晕死 很急啊 能加个QQ 帮我看看嘛 谢谢了 QQ369485270 2 楼 bnmnba 2012-04-19 369485270 写道楼主在吗 你这个注解方式根本就不行 报错啊 org.hibernate.HibernateException: /hibernate.cfg.xml not found 晕死 很急啊 能加个QQ 帮我看看嘛 谢谢了 QQ369485270呵呵,忘了说明了,hibernate.cfg.xml文件是必须的。