package com.escs.utils;

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
* @param num
* @return
*/
public static String getColumnName(Class<?> clazz,int num) {
return getPersistentClass(clazz).getTable().getColumn(num).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;
} }

上述方法可以用个扫描注解的方式进行查找表名以及指定列名  也可以通过扫描配置文件(*.hbm.xml)进行获取表名以及指定列名

测试:

//获取指定列名    
Class clz=Class.forName("com.escs.entity."+"res_00201".toUpperCase());
System.out.println(EntityUtil.getColumnName(clz,0));

hibernate 获取实体的表名、主键名、列名(转载+修改)的更多相关文章

  1. 【Hibernate】--实体状体与主键生成策略

    一.Hibernate三种状态 (1).瞬时状态(只存在Hibernate容器中,数据库中没有与之对应的记录) A.通过new实例化的实体,在没有执行save方法时. B.持久状态调用delete方法 ...

  2. 如何使用sqlalchemy获取表的主键、以及每一个字段名和对应类型

    使用sqlalchemy获取到的结果只包含数据,不包含字段,那么我们如何获取到对应字段和其属性呢?以及如何获取某张表的主键呢? # -*- coding:utf-8 -*- # @Author: Wa ...

  3. sqlserver 批量修改数据库表主键名称为PK_表名

    1.我们在创建sqlserver得数据表的主键的时候,有时会出现,后面加一串随机字符串的情况,如图所示: 2.如果你有强迫症的话,可以使用以下sql脚本进行修改,将主键的名称修改为PK_表名. --将 ...

  4. 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类

    http://www.cnblogs.com/lbangel/p/3487796.html 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的 ...

  5. alter table <表名 > add constraint <主键名>用法

    alter table <表名 > add constraint  <主键名>用法介绍 1.主键约束: 要对一个列加主键约束的话,这列就必须要满足的条件就是分空 因为主键约束: ...

  6. 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句

    最近在写Rafy底层的一些东西,在数据库方面把MySql数据库集成到里面去,里面有一个需求,需要获取非系统数据库,也就是我们自己建立的数据库中所有表的主键和外键元数据列表. 第一种方法:是网上的方法, ...

  7. Oracle 获取表的主键、外键以及唯一约束条件

    Oracle 获取表的主键.外键以及唯一约束条件 Select a.Owner 主键拥有者, a.table_name 主键表, b.Column_Name 主键列, b.Constraint_Nam ...

  8. JDBC获取表的主键

    JDBC获取表的主键 案例,创建订单,并根据订单号向订单明细表插入数据 sql语句: 创建两表 create table orders(  id number(4) primary key,  cus ...

  9. Oracle使用游标为所有用户表添加主键语句

    应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在I ...

随机推荐

  1. R语言做文本挖掘 Part5情感分析

    Part5情感分析 这是本系列的最后一篇文章,该.事实上这种单一文本挖掘的每一个部分进行全部值获取水落石出细致的研究,0基础研究阶段.用R里面现成的算法,来实现自己的需求,当然还參考了众多网友的智慧结 ...

  2. 无法打开物理文件mdf,操作系统错误 5:&quot;5(拒绝訪问。)&quot;

    无法打开物理文件mdf,操作系统错误 5:"5(拒绝訪问.)" 环境: SQL Server 2008 R2 问题: 附加数据库时报错"无法打开物理文件mdf.操作系统错 ...

  3. JMeter怎么使用代理服务器

    一.JMeter有一个内置的代理服务器,主要用户使用浏览器录制脚本,在左侧的WorkBench中添加HTTP Proxy Server即可, 其中port表示代理服务器段口号, URL Pattern ...

  4. java数据结构系列之——数组(1)

    import javax.management.RuntimeErrorException; public class MyArray { private long array[]; private ...

  5. hdu 1251(字典树)

    题目链接:http://acm.hdu.edu.cn/status.php?user=NYNU_WMH&pid=1251&status=5 Trie树的基本实现 字母树的插入(Inse ...

  6. RHEL5 X86-64上安装Oracle 11gR2演示样例与总结

    进入Oracle DBA行业也有好几年了,可是说到安装Oracle的经验,我还真不是特别多,印象中刚開始每次安装都有点磕磕碰碰,随着接触Oracle的时间越来越长,各方面的原理.机制也都有一定的了解后 ...

  7. s3c2440 的 rtc 操作

    实时时钟(RTC)其主要功能是电源故障的制度下,使用后备电源,时钟继续.为了不浪费时间信息. s3c2440内部集成了RTC模块,并且用起来也十分简单. 其内部的寄存器BCDSEC,BCDMIN,BC ...

  8. 教你一步一步部署.net免费空间OpenShift系列之一------帐号注册和验证

    前几天有博友发布了一篇文章<一键部署mono 免费空间支持ASP.NET MVC 再也不担心伙食费换空间了>,支持MVC3和域名绑定,觉得不错,于是自己实践了一下,发现自己实际遇到的问题真 ...

  9. Coreseek/sphinx全文检索的了解

    Coreseek/sphinx全文检索的了解 概述: 全文检索是一种将文件里全部文本与检索项匹配的文字资料检索方法,全文检索是将存储于数据库中整本书.整篇文章中的随意内容信息查找出来的检索.它能够依据 ...

  10. ArcGIS API for Silverlight 编辑Geometry

    概述 ArcMap的编辑功能是非常强大的,ArcEngine编写的CS程序也可以用到ArcMap中提供的编辑功能,那么ArcGIS API forSilverlight针对Geometry的编辑提供了 ...