`
fcm915
  • 浏览: 111075 次
  • 性别: Icon_minigender_1
  • 来自: 泰安
社区版块
存档分类
最新评论

hibernate 动态pojo Map

    博客分类:
  • java
阅读更多
动态domain,用一个Map来代替对像,把原来domain中的属性做key值存进来
实体映射
<hibernate-mapping>
<class entity-name="ItemEntity" table="ITEM_ENTITY">
   <id name="id" type="long" column="ITEM_ID">
      <generator class="native"/>
   </id>
   <property name="initialPrice"
       type="big_decimal"
       column="INIT_PRICE"/>
   <property name="description"
       type="string"
       column="DESCRIPTION"/>
   <many-to-one name="seller"
       entity-name="UserEntity"
       column="USER_ID"/>
        </class>
<class entity-name="UserEntity" table="USER_ENTITY">
         <id name="id" type="long" column="USER_ID">
              <generator class="native"/>
   </id>
   <property name="username"
        type="string"
        column="USERNAME"/>
   <bag name="itemsForSale" inverse="true" cascade="all">
       <key column="USER_ID"/>
       <one-to-many entity-name="ItemEntity"/>
   </bag>
</class>
</hibernate-mapping>
注意:
1.<class name="...">变为<class entity-name="...">
2.<many-to-one>和<one-to-many> 中的class属性变为entity-name

动态domain的工作方式
Map user = new HashMap();
user.put("username","davide");

Map item1 = new HashMap();
item1.put("description","an item for auction");
item1.put("initialPrice",new BigDecimal(99));
item1.put("seller",user);

Map item2 = new HashMap();
item2.put("description", "Another item for auction");
item2.put("initialPrice", new BigDecimal(123));
item2.put("seller", user);

Collection itemsForSale = new ArrayList();
itemsForSale.add(item1);
itemsForSale.add(item2);
user.put("itemsForSale", itemsForSale);
session.save("UserEntity", user);
第一个Map为UserEntity,接下来的两个是ItemEntitys
为两个Map建立了seller user链接.
一个Collection在inverse方设置one-to-many关联初始化

使用方法
Long storedItemId = (Long) item1.get("id");
Map loadedItemMap = (Map) session.load("ItemEntity", storedItemId);
loadedItemMap.put("initialPrice", new BigDecimal(100));

多次映射一个类
<hibernate-mapping>
<class name="model.Item"
        entity-name="ItemAuction"
        table="ITEM_AUCTION">
   <id name="id" column="ITEM_AUCTION_ID">...</id>
   <property name="description" column="DESCRIPTION"/>
   <property name="initialPrice" column="INIT_PRICE"/>
</class>
<class name="model.Item"
        entity-name="ItemSale"
        table="ITEM_SALE">
   <id name="id" column="ITEM_SALE_ID">...</id>
   <property name="description" column="DESCRIPTION"/>
   <property name="salesPrice" column="SALES_PRICE"/>
</class>
</hibernate-mapping>
model.Item持久化类映射了id,description,initialPrice,salesPrice属性.
处决于你运行时的实体名,有些属性是持久化的有的则不是.
Item itemForAuction = new Item();
itemForAuction.setDescription("An item for auction");
itemForAuction.setInitialPrice( new BigDecimal(99) );
session.save("ItemAuction", itemForAuction);

Item itemForSale = new Item();
itemForSale.setDescription("An item for sale");
itemForSale.setSalesPrice( new BigDecimal(123) );
session.save("ItemSale", itemForSale);
正是由于有了逻辑名,hibernate才知道向哪个表中插入数据.

将数据保存到xml文件
Session dom4jSession = session.getSession(EntityMode.DOM4J);
Element userXML =
(Element) dom4jSession.load(User.class, storedUserId);
可以通过以下方式打印到控件台
try {
    OutputFormat format = OutputFormat.createPrettyPrint();
    XMLWriter writer = new XMLWriter( System.out, format);
    writer.write( userXML );
} catch (IOException ex) {
   throw new RuntimeException(ex);
}
若是继续的前面的例子,你可能会得以下结果
<User>
   <id>1</id>
   <username>johndoe</username>
   <itemsForSale>
     <Item>
       <id>2</id>
       <initialPrice>99</initialPrice>
       <description>An item for auction</description>
       <seller>1</seller>
     </Item>
     <Item>
<id>3</id>
<initialPrice>123</initialPrice>
<description>Another item for auction</description>
<seller>1</seller>
     </Item>
   </itemsForSale>
</User>

分享到:
评论

相关推荐

    让hibernate输出sql语句参数配置.doc

    其取值为 dynamic-map、dom4j 或 pojo。 10. hibernate.order_updates hibernate.order_updates 参数用于强制 Hibernate 按照被更新数据的主键,为 SQL 更新排序。其取值为 true 或 false。 11. hibernate....

    Hibernate 参数配置详解

    - **取值**:`dynamic-map`, `dom4j`, `pojo`。 - **示例**:`hibernate.default_entity_mode=pojo` ##### 10. 更新排序 (Order Updates) - **名称**:`hibernate.order_updates` - **描述**:强制 Hibernate 按照...

    Hibernate 参数设置一览表.doc

    8. **hibernate.default_entity_mode**:定义了SessionFactory打开的Session中实体的表示形式,可以是`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**:当设置为`true`时,Hibernate会按主键顺序...

    hibernate 配置属性参数详情(全)

    8. **hibernate.default_entity_mode**:指定Session使用的实体表示模式,如`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**:如果开启,按主键顺序排序更新操作,减少死锁的可能性。 10. **...

    hibernate参数配置

    8. **hibernate.default_entity_mode**: 指定SessionFactory打开的Session的默认实体表现模式,可以是`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**: 开启后,Hibernate会按照主键顺序执行SQL...

    Hibernate开发指

    2. 集合映射:List、Set、Map等集合类型的映射。 3. 联合主键:多个字段共同构成主键的映射。 4. 继承映射:单表继承、多表继承和表-per-hierarchy等策略。 八、性能优化 1. 分页查询:避免一次性加载大量数据,...

    Hibernate可选配置大全

    - **取值**:`dynamic-map`、`dom4j`、`pojo`。 - **用途**:统一实体对象的处理方式,简化代码结构。 ##### 10. hibernate.order_updates - **功能**:强制按主键顺序执行更新操作,减少并发冲突。 - **取值**:`...

    hibernate 二级缓存详解

    二级缓存将数据视为一个Map,Key通常是实体的ID,Value是对应的实体对象。对于实体的读取,无论是通过list、load还是iterate,只要读取到一个对象,都会放入缓存。不过,list操作不会使用缓存,而iterate则会先获取...

    Hibernate+中文文档

    8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种...

    hibernate配置参数详解

    这个配置项指定了Hibernate实体映射的默认模式,常见的有`pojo`、`dynamic-map`等。 9. **`hibernate.order_updates`**: 是否按顺序更新记录。 ```properties hibernate.order_updates=true ``` 设置为`true`...

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    hibernate3中文手册

    10. **集合映射**:阐述List、Set、Map等集合类型在Hibernate中的映射方法。 11. **自定义类型**:如果需要对特殊类型的属性进行映射,可以实现UserType接口来自定义类型。 12. **实体状态管理**:区分临时态、...

    hibernate3.2中文文档(chm格式)

    8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种...

    HibernateAPI中文版.chm

    8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种...

    hibernate 教程

    POJO简单示例 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认的构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4....

    hibernate-types:Hibernate Types库为您提供了Hibernate ORM核心不支持的其他类型

    将JSON列类型映射到List&lt;POJO&gt;或Map&lt;String&gt; ,需要确保POJO类型覆盖默认的equals和hashCode方法,并根据JSON对象的内容实现它们。 否则,Hibernate脏检查机制可能会触发意外的UPDATE语句。 查看。 Oracle 您应该...

    hibernate[1].cfg.xml中配置信息详解

    **取值**:`dynamic-map`、`dom4j`、`pojo`等。 ##### 10. `hibernate.order_updates` **用途**:启用或禁用按主键排序SQL更新。在高并发场景下,此配置项有助于减少事务间的死锁。 **取值**:`true`或`false`。 ...

    hibernate配置详解

    设置默认的实体表示模式,可以选择动态映射(dynamic-map)、DOM4J或POJO。 9. **hibernate.order_updates** 如果开启,Hibernate会按照主键顺序排序更新操作,以降低并发环境下的死锁风险。 10. **hibernate....

    hibernate框架开发资料1

    资料中的笔记会详细介绍Hibernate的配置、实体类、持久化对象(POJO)、Session接口以及Criteria查询等基本概念。 2. **对象关系映射(ORM)** ORM是Hibernate的核心特性,它允许我们将Java对象直接保存到数据库,...

Global site tag (gtag.js) - Google Analytics