`
bnmnba
  • 浏览: 288619 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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>
 

 

 

 

 

分享到:
评论
2 楼 bnmnba 2012-04-19  
369485270 写道
楼主在吗  你这个注解方式根本就不行 报错啊 org.hibernate.HibernateException: /hibernate.cfg.xml not found  晕死  很急啊 能加个QQ 帮我看看嘛 谢谢了 QQ369485270

呵呵,忘了说明了,hibernate.cfg.xml文件是必须的。
1 楼 369485270 2012-03-20  
楼主在吗  你这个注解方式根本就不行 报错啊 org.hibernate.HibernateException: /hibernate.cfg.xml not found  晕死  很急啊 能加个QQ 帮我看看嘛 谢谢了 QQ369485270

相关推荐

Global site tag (gtag.js) - Google Analytics