Hibernate之AbstractEntityPersister

2014-11-24 08:54:06 · 作者: · 浏览: 0
Hibernate开发中需要根据持久层对象获取所映射的 数据库表相关信息,如表名,主键,外键对象等相关系。
Hibernate配置 Hibernate.cfg.xml
[ html]
< xml version='1.0' encoding='utf-8' >
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
com. mysql.jdbc.Driver
jdbc:mysql://localhost:3306/ehome
root
mysql
org.hibernate.dialect.MySQLDialect
thread
true
HhArticle.hbm.xml 文件在此省略
编写HibernateUtil辅助类 获取sessionFactory
[java]
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;
}
}
测试类
[java]
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;
}
}