zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Hibernate之AbstractEntityPersister详解编程语言

2023-06-13 09:20:42 时间

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

cjavamysqlxml