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; 
	} 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/14392.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论