hibernate 获取实体的表名、主键名、列名(转载+修改)
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 获取实体的表名、主键名、列名(转载+修改)的更多相关文章
- 【Hibernate】--实体状体与主键生成策略
一.Hibernate三种状态 (1).瞬时状态(只存在Hibernate容器中,数据库中没有与之对应的记录) A.通过new实例化的实体,在没有执行save方法时. B.持久状态调用delete方法 ...
- 如何使用sqlalchemy获取表的主键、以及每一个字段名和对应类型
使用sqlalchemy获取到的结果只包含数据,不包含字段,那么我们如何获取到对应字段和其属性呢?以及如何获取某张表的主键呢? # -*- coding:utf-8 -*- # @Author: Wa ...
- sqlserver 批量修改数据库表主键名称为PK_表名
1.我们在创建sqlserver得数据表的主键的时候,有时会出现,后面加一串随机字符串的情况,如图所示: 2.如果你有强迫症的话,可以使用以下sql脚本进行修改,将主键的名称修改为PK_表名. --将 ...
- 通过jdbc获取数据库中的表结构 主键 各个表字段类型及应用生成实体类
http://www.cnblogs.com/lbangel/p/3487796.html 1.JDBC中通过MetaData来获取具体的表的相关信息.可以查询数据库中的有哪些表,表有哪些字段,字段的 ...
- alter table <表名 > add constraint <主键名>用法
alter table <表名 > add constraint <主键名>用法介绍 1.主键约束: 要对一个列加主键约束的话,这列就必须要满足的条件就是分空 因为主键约束: ...
- 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句
最近在写Rafy底层的一些东西,在数据库方面把MySql数据库集成到里面去,里面有一个需求,需要获取非系统数据库,也就是我们自己建立的数据库中所有表的主键和外键元数据列表. 第一种方法:是网上的方法, ...
- Oracle 获取表的主键、外键以及唯一约束条件
Oracle 获取表的主键.外键以及唯一约束条件 Select a.Owner 主键拥有者, a.table_name 主键表, b.Column_Name 主键列, b.Constraint_Nam ...
- JDBC获取表的主键
JDBC获取表的主键 案例,创建订单,并根据订单号向订单明细表插入数据 sql语句: 创建两表 create table orders( id number(4) primary key, cus ...
- Oracle使用游标为所有用户表添加主键语句
应用场合:数据表新增自增一主键能加快数据表的访问速度,而且是整形的索引速度最快.本程序适合在导入Oracle数据库时删除不存在主键的情况下运行. 代码说明:所有的表主键字段名都设置为ID,如果已存在I ...
随机推荐
- 脸识别API微软牛津项目
微软牛津项目人脸识别API初探 按照董子的这篇博客中的介绍,到微软牛津项目的网站申请到测试用的人脸识别Key,按照官方文档的介绍,把wpf项目建好之后,按照一步步的流程下来就可以完成example中的 ...
- System.arraycopy--findbugs检查引发的更改
EI2: This code stores a reference to an externally mutable object into the internal representation o ...
- SQL Server 2008杀数据库连接
杀数据库连接: DECLARE @temp NVARCHAR(20) DECLARE myCurse CURSOR FOR SELECT spid FROM sys.sysprocesses WHER ...
- Android 使用DexClassLoader要执行其他apk方法
Android在apk文件dex文件是java编译出来.class次打包,当然在打包之前会利用自己的协议做一些数据处理,比如优化函数表和变量表.在java程序中是使用classloader来载入这些编 ...
- React实践
React实践(一) 该实践取自官方教程:https://github.com/reactjs/react-tutorial 主要是自实现的过程以及一些心得体会 该实践是实现一个评论框. 一个展示 ...
- C++ 在dynamic_cast<>用法
/*这是从网上断开的试样.主要是关于 dynamic_cast<> 用法.*/ /* 行动:对象指向一个基类(或参考)cast一个指向派生类,dynamic_cast将基于一个基类指针确实 ...
- 如何让虚拟机识别插入的USB闪存驱动器
首先,打开虚拟机,再就是工具栏 有一台虚拟机 -> 移动设备 -> usb ->欧克. 版权声明:本文博主原创文章,博客,未经同意不得转载.
- measureChildren作品
无论是在改写View依然是ViewGroup什么时候.特别ViewGrop什么时候,通常是不可避免的重写onMeasure方法,我们一定会调用setMeasuredDimension()将測量好的宽高 ...
- linux_redhat_线程后台运行方法
建议看完1:后直接看2 screen 方式熟练些可靠. 次方法适用于redhat系统,unbunt* 系统用screen 命令 产看系统版本 cat /proc/version 首先项目制作的sh文件 ...
- ZOJ 3802 Easy 2048 Again 像缩进DP
链接:problemId=5334">http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334 题意:一个长度为5 ...