Hibernate之AbstractEntityPersister

Hibernate开发中需要根据持久层对象获取所映射的数据库表相关信息,如表名,主键,外键对象等相关系。

Hibernate配置 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>
		<!-- Database connection settings -->
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://localhost:3306/ehome</property>
		<property name="connection.username">root</property>
		<property name="connection.password">mysql</property>
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="current_session_context_class">thread</property>
		<property name="show_sql">true</property>

		<mapping resource="org/bkgd/ehome/jeeplugin/userapp/domain/HhArticle.hbm.xml" />

	</session-factory>
</hibernate-configuration>

HhArticle.hbm.xml 文件在此省略


编写HibernateUtil辅助类 获取sessionFactory

public class HibernateUtils {
	
	private static final SessionFactory sessionFactory;;
	//创建sessionFactory
	static {
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

测试类

public class TestPersister {
	private static AbstractEntityPersister classMetadata;
	private Object obj;
	
	public TestPersister(SessionFactory sessionFatory, Object obj) {
		classMetadata = (AbstractEntityPersister) sessionFatory.getClassMetadata(obj.getClass());
		this.obj = obj;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//实例化classMetadata   传入sessionFactory和obj对象
		TestPersister tp = new TestPersister(HibernateUtils.getSessionFactory(),new HhArticle());
		Session session = HibernateUtils.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		SQLQuery sqlquery = session.createSQLQuery("DELETE FROM " + classMetadata.getTableName());
		sqlquery.executeUpdate();
		session.getTransaction().commit(); //事务提交
		
		//classMetadata一些其他操作
		System.out.println(classMetadata.getTableName());  //表名
		System.out.println(classMetadata.getIdentifierPropertyName()); //主键列映射属性
		System.out.println(classMetadata.getEntityName()); //对象名称
		for(String str:classMetadata.getPropertyNames()){   //非主键属性 
			System.out.println(str);   
		}
	}
	public AbstractEntityPersister getClassMetadata() {
		return classMetadata;
	}
	public void setClassMetadata(AbstractEntityPersister classMetadata) {
		this.classMetadata = classMetadata;
	}
	public Object getObj() {
		return obj;
	}
	public void setObj(Object obj) {
		this.obj = obj;
	}
}


原文地址:https://www.cnblogs.com/itmyhome/p/4131396.html