Hibernate获取表配置信息包括Common注解信息

package cn.joker.hibernateutil;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;


/**
 * 功能描述:根据实体类得到对应的表名、主键名、字段名工具类 </p>
 * 注:po类名须与对应映射文件名一致,即Student.java与Student.hbm.xml
 * 
 * @Date:Nov 10, 2008
 * @Time:3:13:07 PM
 * 
 */
public class HibernateConfigurationHelper {
	public static Configuration hibernateConf;
	@SuppressWarnings("unused")
	private static Configuration getHibernateConf() {
		if (hibernateConf == null) {
			return new Configuration();
		}
		return hibernateConf;
	}
	@SuppressWarnings("unchecked")
	public static PersistentClass getPersistentClass(Class clazz) {
		synchronized (HibernateConfigurationHelper.class) {
			PersistentClass pc = getHibernateConf().getClassMapping(
					clazz.getName());
			if (pc == null) {
				hibernateConf = getHibernateConf().addClass(clazz);
				pc = getHibernateConf().getClassMapping(clazz.getName());

			}
			return pc;
		}
	}
	/**
	 * 功能描述:获取实体对应的表名
	 * 
	 * @param clazz
	 *            实体类
	 * @return 表名
	 */
	@SuppressWarnings("unchecked")
	public static String getTableName(Class clazz) {
		return getPersistentClass(clazz).getTable().getName();
	}
	/**
	 * 功能描述:获取实体对应表的主键字段名称
	 * 
	 * @param clazz
	 *            实体类
	 * @return 主键字段名称
	 */
	@SuppressWarnings("unchecked")
	public static String getPkColumnName(Class clazz) {

		return getPersistentClass(clazz).getTable().getPrimaryKey()
				.getColumn(0).getName();

	}
	/**
	 * 根据实体类获取所有列的备注信息
	 * @param clazz
	 * @return
	 */
	public static Map<String,String> getComments(Class clazz){
		System.out.println("test"); 
		PersistentClass persistentClass = getPersistentClass(clazz);
		Iterator<Property> it=persistentClass.getPropertyIterator();
		Map<String, String> comments=new HashMap<String, String>();
		while(it.hasNext()){
			Property propert= it.next();
			Iterator<Column> columns=propert.getColumnIterator();
			while(columns.hasNext()){
				Column column= columns.next();
				String comment=column.getComment();
				if (StringUtils.isNotEmpty(comment)) {
					comments.put(propert.getName(), comment);
				}				
			}
		}
		return comments;
	}
	/**
	 * 根据实体类和属性获取列的备注
	 * @param clazz
	 * @param propertyName
	 * @return
	 */
	public static String getComment(Class clazz,String propertyName){
		PersistentClass persistentClass = getPersistentClass(clazz);
		Property property = persistentClass.getProperty(propertyName);
		Iterator i=property.getColumnIterator();
		while(i.hasNext()){
			System.out.println(((Column)i.next()).getComment());
		}
		System.out.println(property.getMetaAttributes());
		Iterator it = property.getColumnIterator();
		if (it.hasNext()) {
			Column column = (Column) it.next();
			return column.getComment();
		}
		return null;
	}
	/**
	 * 功能描述:通过实体类和属性,获取实体类属性对应的表字段名称
	 * 
	 * @param clazz
	 *            实体类
	 * @param propertyName
	 *            属性名称
	 * @return 字段名称
	 */
	@SuppressWarnings("unchecked")
	public static String getColumnName(Class clazz, String propertyName) {
		PersistentClass persistentClass = getPersistentClass(clazz);
		Property property = persistentClass.getProperty(propertyName);
		
		Iterator i=property.getColumnIterator();
		while(i.hasNext()){
			System.out.println(((Column)i.next()).getComment());
		}
		System.out.println(property.getMetaAttributes());
		Iterator it = property.getColumnIterator();
		if (it.hasNext()) {
			Column column = (Column) it.next();
			return column.getName();
		}
		return null;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值