hibernate动态模型(Dynamic models)
来源:互联网 发布:淘宝名牌同款是否违规 编辑:程序博客网 时间:2024/06/05 14:20
动态模型的使用也可以不用设置:
session = sessionFactory.openSession();
session = session.getSession(EntityMode.Map);
Session能自动判断。
运行期的持久化实体没有必要一定表示为像POJO类或JavaBean对象那样的形式。Hibernate也支持动态模型 (在运行期使用Map
的Map
)和象DOM4J的树模型那 样的实体表示。使用这种方法,你不用写持久化类,只写映射文件就行了。
Hibernate默认工作在普通POJO模式。你可以使用配置选项default_entity_mode
, 对特定的SessionFactory
,设置一个默认的实体表示模式。 (参见表 3.3 “ Hibernate配置属性 ”。)
下面是用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 customerMap david = new HashMap();david.put("name", "David");// Create an organizationMap foobar = new HashMap();foobar.put("name", "Foobar Inc.");// Link bothdavid.put("organization", foobar);// Save boths.save("Customer", david);s.save("Organization", foobar);tx.commit();s.close();
动态映射的好处是,变化所需要的时间少了,因为原型不需要实现实体类。然而,你无法进行 编译期的类型检查,并可能由此会处理很多的运行期异常。幸亏有了Hibernate映射,它使得数 据库的schema能容易的规格化和合理化,并允许稍后在此之上添加合适的领域模型实现。
实体表示模式也能在每个Session
的基础上设置:
Session dynamicSession = pojoSession.getSession(EntityMode.MAP);// Create a customerMap david = new HashMap();david.put("name", "David");dynamicSession.save("Customer", david);...dynamicSession.flush();dynamicSession.close()...// Continue on pojoSession
请注意,用EntityMode
调用getSession()
是在 Session
的API中,而不是SessionFactory
。 这样,新的Session
共享底层的JDBC连接,事务,和其他的上下文信 息。这意味着,你不需要在第二个Session
中调用flush()
和close()
,同样的,把事务和连接的处理 交给原来的工作单元。
- hibernate动态模型(Dynamic models)
- hibernate动态模型(Dynamic models)
- hibernate中的实体名以及动态实体dynamic models
- 9-Hibernate3中的动态模型(Dynamic Model)
- Hibernate动态模型
- Hibernate 动态模型
- Custom Models and Dynamic Trees
- (异常)Hibernate的动态模型
- hibernate dynamic
- 马尔可夫模型(Markov models)
- Hypergraph Models超图模型
- django models 模型
- django 模型 models详解
- 计算机视觉-混合动态纹理模型(Mixtures of Dynamic Textures)
- hibernate的动态更新(dynamic-update = "true")
- Hibernate入门实例——动态组件(Dynamic components)
- 代码优化:Hibernate中的动态更新 dynamic-update
- django dynamic models and field injections
- 一张表替换另一张表
- mysql数据库root密码丢失后的恢复方法
- DataGridview标题出现??
- c++ operator重载的例子
- C++初始化与赋值
- hibernate动态模型(Dynamic models)
- hdu 1060
- 七夕怀念
- oracle数据类型和对应的java类型
- BeginInvoke和EndInvoke方法
- 非交互管理crontab任务
- c3p0、hibernate 连接sybase数据库无法设置连接选项 SET_READONLY_TRUE、SET_CATALOG。 解决 .
- 网上的算法题总结
- Xml文件数据的优点