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. HDU 1198 Farm Irrigation (并检查集合 和 dfs两种实现)

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. Writing your first Django app, part 1(转)

    Let’s learn by example. Throughout this tutorial, we’ll walk you through the creation of a basic pol ...

  3. jaxb和dozer简介

    一.jaxb是什么     JAXB是Java Architecture for XML Binding的缩写.可以将一个Java对象转变成为XML格式,反之亦然.     我们把对象与关系数据库之间 ...

  4. 使用Enterprise Architecture绘制10种UML画画

    UML绘制10种课程要求UML画画,选Enterprise Architecture作为一个绘图工具,每一个草图必须是网上找教程,我觉得很麻烦,还有一些数字并没有找到详细的教程.在我自己找一个绘图方法 ...

  5. Sql使用视图(简单的视图)适合入门-level

    创建以便从库更好的数据呼叫和一个数据库,以(例如,该209东东库转移205图书馆) 例:209图书馆有不同的库名:数据库(AIS20140417092531电影库)供应商表(t_Supplier ). ...

  6. 今天才知道css hack是什么

    先来个冷笑话:一晚下班回家,一民警迎面巡逻而来.突然对我大喊:站住! 民警:int类型占几个字节? 我:4个. 民警:你可以走了. 我感到很诧异. 我:为什么问这样的问题? 民警:深夜还在街上走,寒酸 ...

  7. 2013级C++第13周(春)项目——继承的进一步话题与GUI应用开发

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 程序阅读:阅读以下类的定义,请说出在 ...

  8. 【Espruino】NO.15 nRF24L01+无线收发器

    http://blog.csdn.net/qwert1213131/article/details/35853747 本文属于个人理解,能力有限,纰漏在所难免,还望指正! [小鱼有点电] [Espru ...

  9. 对[yield]的浅究到发现[async][await]

    原文:对[yield]的浅究到发现[async][await] 上篇对[foreach]的浅究到发现[yield]写完后,觉得对[yield]还没有理解清楚,想起曾经看过一位大牛的帖子讲的很深刻(链接 ...

  10. Asp.Net MVC5入门学习系列①

    原文:Asp.Net MVC5入门学习系列① 现在直接开始MVC5的学习系列,学习资源来自Micrsoft. 开始使用Asp.Net MVC 5 打开Visual Studio 2013,然后新建一个 ...