目前有一个需求,有一个业务功能,需要在不同的公司的系统查询出结果数据,然后汇总,由于模型的不统一,所以我们要在线定义模型。
初步方案是每个系统建一套模型,配置文件和hibernate映射文件都存在一个公共数据库里面,使用hibernate的动态模型(Dynamic models)来在线定义模型。
请问有用过Dynamic models的吗?谈谈Dynamic models好用不?参考手册上说目前还是实验阶段。
初步方案是每个系统建一套模型,配置文件和hibernate映射文件都存在一个公共数据库里面,使用hibernate的动态模型(Dynamic models)来在线定义模型。
请问有用过Dynamic models的吗?谈谈Dynamic models好用不?参考手册上说目前还是实验阶段。
Struts1有个动态Form,那叫一个云里雾里啊,很容易混乱
下面是用Map来表示的例子。首先,在映射文件中,要声明 entity-name来代替一个类名(或作为一种附属)。
<hibernate-mapping> <class entity-name="Customer"> <id name="id" type="long" column="ID"> <generator class="sequence"/> </id> <property name="name" column="NAME" type="string"/> <property name="address" column="ADDRESS" type="string"/> <many-to-one name="organization" column="ORGANIZATION_ID" class="Organization"/> <bag name="orders" inverse="true" lazy="false" cascade="all"> <key column="CUSTOMER_ID"/> <one-to-many class="Order"/> </bag> </class> </hibernate-mapping> 注意:虽然是用目标类名来声明关联的,但是关联的目标类型除了是POJO之外,也可以 是一个动态的实体。 在使用dynamic-map为SessionFactory 设置了默认的实体模式之后,可以在运行期使用Map的 Map。
Session s = openSession(); Transaction tx = s.beginTransaction(); Session s = openSession(); // Create a customer Map david = new HashMap(); david.put("name", "David"); // Create an organization Map foobar = new HashMap(); foobar.put("name", "Foobar Inc."); // Link both david.put("organization", foobar); // Save both s.save("Customer", david); s.save("Organization", foobar); tx.commit(); s.close(); 动态映射的好处是,变化所需要的时间少了,因为原型不需要实现实体类。然而,你无法进行 编译期的类型检查,并可能由此会处理很多的运行期异常。幸亏有了Hibernate映射,它使得数 据库的schema能容易的规格化和合理化,并允许稍后在此之上添加合适的领域模型实现。
通过用户的在线定义模型,在后台用DOM动态生成hibernate的映射文件xxx.hbm.xml,然后再修改spring或hibernate.cfg.xml文件,至于对应的java模型文件吗,这个动态生成文件好像很难,不知道可不可以,我没弄过。这中业务没有遇到过,个人意见不知道对你有没有用。
恩,也曾经有这个想法,动态pojo的生产可以io写源代码,Runtime.getRuntime().exec来编译class,反射来加载类。不过感觉有点蹩脚,太非主流了
ResultTransformer->AliasToBeanConstructorResultTransformer, AliasToBeanResultTransformer想怎么映射就怎么射。有没有认真看过 Hibernate API 文档?