动态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>
分享到:
相关推荐
其取值为 dynamic-map、dom4j 或 pojo。 10. hibernate.order_updates hibernate.order_updates 参数用于强制 Hibernate 按照被更新数据的主键,为 SQL 更新排序。其取值为 true 或 false。 11. hibernate....
- **取值**:`dynamic-map`, `dom4j`, `pojo`。 - **示例**:`hibernate.default_entity_mode=pojo` ##### 10. 更新排序 (Order Updates) - **名称**:`hibernate.order_updates` - **描述**:强制 Hibernate 按照...
8. **hibernate.default_entity_mode**:定义了SessionFactory打开的Session中实体的表示形式,可以是`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**:当设置为`true`时,Hibernate会按主键顺序...
8. **hibernate.default_entity_mode**:指定Session使用的实体表示模式,如`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**:如果开启,按主键顺序排序更新操作,减少死锁的可能性。 10. **...
8. **hibernate.default_entity_mode**: 指定SessionFactory打开的Session的默认实体表现模式,可以是`dynamic-map`、`dom4j`或`pojo`。 9. **hibernate.order_updates**: 开启后,Hibernate会按照主键顺序执行SQL...
2. 集合映射:List、Set、Map等集合类型的映射。 3. 联合主键:多个字段共同构成主键的映射。 4. 继承映射:单表继承、多表继承和表-per-hierarchy等策略。 八、性能优化 1. 分页查询:避免一次性加载大量数据,...
- **取值**:`dynamic-map`、`dom4j`、`pojo`。 - **用途**:统一实体对象的处理方式,简化代码结构。 ##### 10. hibernate.order_updates - **功能**:强制按主键顺序执行更新操作,减少并发冲突。 - **取值**:`...
二级缓存将数据视为一个Map,Key通常是实体的ID,Value是对应的实体对象。对于实体的读取,无论是通过list、load还是iterate,只要读取到一个对象,都会放入缓存。不过,list操作不会使用缓存,而iterate则会先获取...
8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种...
这个配置项指定了Hibernate实体映射的默认模式,常见的有`pojo`、`dynamic-map`等。 9. **`hibernate.order_updates`**: 是否按顺序更新记录。 ```properties hibernate.order_updates=true ``` 设置为`true`...
第一部分 从Hibernate和EJB 3.0开始 第1章 理解对象/关系持久化 1.1 什么是持久化 1.1.1 关系数据库 1.1.2 理解SQL 1.1.3 在Java中使用SQL 1.1.4 面向对象应用程序中的持久化 1.2 范式不...
10. **集合映射**:阐述List、Set、Map等集合类型在Hibernate中的映射方法。 11. **自定义类型**:如果需要对特殊类型的属性进行映射,可以实现UserType接口来自定义类型。 12. **实体状态管理**:区分临时态、...
8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种...
8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种...
POJO简单示例 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认的构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4....
将JSON列类型映射到List<POJO>或Map<String> ,需要确保POJO类型覆盖默认的equals和hashCode方法,并根据JSON对象的内容实现它们。 否则,Hibernate脏检查机制可能会触发意外的UPDATE语句。 查看。 Oracle 您应该...
**取值**:`dynamic-map`、`dom4j`、`pojo`等。 ##### 10. `hibernate.order_updates` **用途**:启用或禁用按主键排序SQL更新。在高并发场景下,此配置项有助于减少事务间的死锁。 **取值**:`true`或`false`。 ...
设置默认的实体表示模式,可以选择动态映射(dynamic-map)、DOM4J或POJO。 9. **hibernate.order_updates** 如果开启,Hibernate会按照主键顺序排序更新操作,以降低并发环境下的死锁风险。 10. **hibernate....
资料中的笔记会详细介绍Hibernate的配置、实体类、持久化对象(POJO)、Session接口以及Criteria查询等基本概念。 2. **对象关系映射(ORM)** ORM是Hibernate的核心特性,它允许我们将Java对象直接保存到数据库,...