`
bnmnba
  • 浏览: 293634 次
  • 性别: 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

相关推荐

    hibernate主键生成策略

    默认表名为`hibernate_unique_key`,列名为`next_hi`。主键生成通过以下步骤: - 获取Hi值:从数据库表中读取`next_hi`,加1后保存回表。 - 获取Lo值:在0到`max_lo`范围内循环取值。 - 通过公式`hi * (max_lo + ...

    Hibernate实体映射

    例如,`@Entity`注解标识一个类为Hibernate实体,`@Table`指定对应的数据库表名,`@Id`标记主键字段,`@GeneratedValue`定义主键生成策略等。此外,`@Column`用于指定列名和类型,`@ManyToOne`、`@OneToMany`、`@...

    hibernate 和hibernate_annotations(中文API).pdf帮助文档

    2. @Table:指定实体对应的数据库表名,可以设置别名、序列化等属性。 3. @Id:标识实体的主键字段,可以与@GeneratedValue结合使用自动生成主键。 4. @GeneratedValue:定义主键生成策略,如.AUTO、.IDENTITY、....

    hibernate.hbm.xml详解

    开发人员可以通过查阅`hibernate-mapping-3.0.dtd`文档来获取更详细的属性定义和使用方法,以便在实际开发中灵活运用。 总之,`hibernate.hbm.xml`文件是Hibernate的核心配置文件,它清晰地定义了Java对象和数据库...

    Hibernate生产SQL语句

    1. **实体类(Entity)与表映射**:Hibernate通过`@Entity`注解定义一个Java类为数据库中的表,`@Table`注解指定对应的表名。实体类的属性对应表中的列,`@Column`注解用于定义列名。 2. **属性映射(Field Mapping...

    java实体转mysql建表语句

    使用JPA的注解,如`@Entity`(标识实体类)、`@Table`(指定表名)、`@Id`(主键)、`@GeneratedValue`(主键生成策略)、`@Column`(指定列名和属性)等,可以让转换过程更简单,因为这些信息可以直接被工具读取。...

    生成hibernate映射文件工具

    1. 连接数据库:工具会首先连接到指定的数据库,获取数据库的元数据信息,如表名、列名、约束等。 2. 分析表结构:根据数据库中的表结构,工具会解析出每个表的字段类型、主键信息以及可能存在的关联关系。 3. 生成...

    hibernate-common-annotations.jar

    2. @Table:指定实体对应的数据库表名。 3. @Id:定义实体的主键字段,对应表中的主键列。 4. @GeneratedValue:控制主键的生成策略,如自增、UUID等。 5. @Column:定义字段属性,如长度、是否允许为空等。 6. @...

    Hibernate较完整资料

    5. `&lt;property&gt;` 元素表示实体类的属性,`name` 是 Java 中的字段名,`column` 是对应数据库表中的列名。 `TestHibernate` 类是一个简单的测试类,展示了如何在 Hibernate 中进行数据库操作: 1. 静态初始化块中,...

    hibernate-annotations 相关jar包

    2. `@Table`: 定义实体类对应的数据库表名及属性。 3. `@Id`: 标识类中的主键字段,每个实体类至少有一个`@Id`注解的字段。 4. `@GeneratedValue`: 配合`@Id`注解,定义主键生成策略,如自动增长、UUID等。 5. `@...

    hibernate开发

    - `&lt;id&gt;`:主键字段名、列名。 - `&lt;generator&gt;`:定义主键生成策略,如increment、sequence、identity、native、uuid、hilo等。 **Hibernate的主键生成策略** - `increment`:在内存中自增,不适合集群环境。 - `...

    hibernate 课件 hibernate 课件

    比如,@Entity表示这是一个数据库表映射的类,@Table指定对应的表名,@Id标识主键字段,@Column定义列名等。 数据持久化是Hibernate的核心功能之一。通过Hibernate,我们可以通过CRUD(Create、Read、Update、...

    hibernate annotation 中文文档

    例如,`@Entity`表示该类为一个数据库实体,`@Table`指定对应的数据库表名,`@Id`则标识类中的主键字段。 2. **实体类映射** - `@Column`: 用于字段,映射到数据库表的列,可以设置列名、长度、是否可为空等属性。...

    hibernate映射和查询

    `@Entity` 注解表示这是一个实体类,`@Table(name = "students")` 指定对应的数据库表名,`@Id` 标记主键字段,`@GeneratedValue` 用于自动生主键值,而 `@Column` 注解用于标记普通字段并指定其在数据库表中的列名...

    Hibernate 3.1.2Chinese

    例如@Table、@Column、@Id等注解分别用于指定表名、列名和主键。 5. **主键生成策略**: Hibernate提供了多种主键生成策略,如.AUTO(由数据库自动生成)、.TABLE(通过独立的表生成)、.SEQUENCE(使用序列号)等。...

    hibernate入门必看

    - `&lt;property&gt;`元素用于配置普通属性映射,其`name`属性指定了类中的属性名,如果没有指定`column`属性,则默认使用属性名作为数据库列名。 #### 四、总结 通过以上步骤,我们已经完成了使用Hibernate实现Java对象...

    hibernate4

    例如,@Table、@Column、@Id等注解分别用于指定实体对应的表名、列名和主键。 3. Session:Session是Hibernate的主要工作单元,它负责对象的持久化操作。创建、更新、删除和查询数据库记录都通过Session接口完成。 ...

    第一个手写Hibernate

    如`@Table`定义表名,`@Column`定义列名,`@ManyToOne`、`@OneToMany`等表示关联关系。 在"第一个手写Hibernate"项目中,你可以亲手实践上述步骤,通过编写代码来了解Hibernate的每一个环节,加深对ORM的理解。同时...

    hibernate最简单的例子,未整合其他框架

    注解如`@Table`定义表名,`@Column`定义列名,`@OneToMany`, `@ManyToOne`, `@OneToOne`和`@ManyToMany`定义关联关系。 5. Session接口: Session是Hibernate的核心接口,它负责对象的持久化操作,如保存、更新、...

Global site tag (gtag.js) - Google Analytics