hibernate一个实体类映射多张表

来源:互联网 发布:opencv3.0 sift算法 编辑:程序博客网 时间:2024/04/29 23:58

最近一个项目中需要有自动生成表的功能进行数据转储,因为ORM用的是hibernate,因为我决定用hibernate实现,不仅操作方便而且易于查询。现将代码贴到此供大家学习交流。

后台的实体类映射基本都是基于注解的,但是动态生成的话还是应该选择配置文件,因为配置文件灵活易操作。

1、首先定义一个模板文件,文本的就行,配置通用属性。

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.sevenlevel.demo.User"><!--注意entity-name,如果没有此属性的话会报重复映射异常--><class name="HistoryAuditInfo" table=":tableName" entity-name=":tableName"><id name="id" column="ID" length="32"><generator class="uuid.hex" /></id><property name="name" column="C_001" /><property name="age" column="C_002" /></class></hibernate-mapping>

2、生成具体的hbm.xml配置文件

然后就是生成配置文件了,比如我要生成一张叫d_001的表,可以使用FileUtils.read()方法读取到内容后然后replaceAll(":tableName","d_001")后write到任意位置。

3、生成表和操作数据

这一步需要借助Hibernate的Configuration类完成,如果集成了Spring了的话可使用context.getBean("&sessionFactory")获取。



ApplicationContext ac = new ClassPathXmlApplicationContext(new String[] { "classpath:**\\spring\\session_factory.xml" });LocalSessionFactoryBean lsf = (LocalSessionFactoryBean) ac.getBean("&sessionFactory");Configuration cfg = lsf.getConfiguration();cfg.setProperty(Environment.FORMAT_SQL, "true").addResource("cn/sevenlevel/test/dynamic.hbm.xml");new SchemaUpdate(cfg).execute(true, true);SessionFactory sf = cfg.buildSessionFactory();Session s = sf.openSession();User user=new User("张三",20);s.save("d_001",user);org.hibernate.Transaction tx = s.beginTransaction();tx.commit();s.close();

齐活!

作者邮箱:wangxiaomu@foxmail.com




原创粉丝点击