今天无意间碰到了,hibernate的动态模型,于是 乎自己动手做了一个小实验,做了之后就明白了,不过的总的感觉来说,与cglib相似,但是有些不同的地方是,动态模型需要自己写一个配置文件,只是自己不写pojo而已,从个人观点上来讲,这样还是不能动态的构造出一个对象,并保存到数据库中,如果想要给表追加上一个字段,那么就还得把:
<!--<property name="hbm2ddl.auto">update</property>-->打开,这样与写一个pojo的差别不是很大。以下是自己做的一个小实验。
先写一个配置,然后放hibernate.cfg.xml中
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class table="MY_COMMENT_" entity-name="Users">
<id name="COMMENTS_ID" type="java.lang.Integer">
<generator class="identity"/>
</id>
<property name="REPLEIED" type="java.lang.String"/>
<property name="REPLY_TIME" type="java.lang.String"/>
<property name="REPLY_TIME_" type="java.lang.String"/>
</class>
</hibernate-mapping>
以下测试:
在这个里面可以自己在创建的时候自己修改hibernate对对象的模式
package lml.base.dynamic;
import java.util.HashMap;
import java.util.Map;
import lml.base.dao.BaseDAO;
import lml.base.dao.DaoFactory;
import org.hibernate.EntityMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class DynamicTest {
BaseDAO baseDAO = DaoFactory.getDao();
private static SessionFactory sf;
@BeforeClass
public static void beforClass(){
Configuration cg = new Configuration();
cg.configure();
// cg.setProperty(Environment.DEFAULT_ENTITY_MODE, EntityMode.MAP.toString());
sf = cg.buildSessionFactory();
}
@Test
@SuppressWarnings("unchecked")
public void testCreate() {
Map user = new HashMap();
user.put("REPLY_TIME", "zhongguosren+");
user.put("REPLEIED", "www.cqwu.net");
user.put("REPLY_TIME_", "www.cqwu.net");
Session session = sf.openSession();
session.beginTransaction();
session.save("Users", user);
session.getTransaction().commit();
}
@Test
@Ignore
public void testSearch() {
Session session = baseDAO.getSession();
Map user = (Map) session.load("Users", 1);
System.out.println(user.get("REPLEIED"));
session.close();
}
@Test
@Ignore
public void testUpdate(){
Session session = baseDAO.getSession();
session.beginTransaction();
Map user = (Map) session.load("Users", 1);
user.put("REPLEIED", "wan");
session.update("Users",user);
System.out.println(user.get("REPLEIED"));
session.getTransaction().commit();
session.close();
}
}
在这个地方,修改与不修改效果一样。