- 浏览: 124554 次
- 性别:
- 来自: 深圳
文章分类
最新评论
例:建表脚本
create table customers( id bigint not null, name varchar(15), primary key (id) ) create table orders( id bigint not null, order_number varchar(15), customer_id bigint not null, primary key(id) ) alter table orders add index idx_customer_id(customer_id),add constraint fk_customer_id foreign key(customer_id) references customers(id);
Customer.java
package com.hibernate.model; import java.util.Set; public class Customer { private Long id; private String name; private Set orders; public Customer(String name,Set orders){ this.name = name; this.orders = orders; } public Customer(){ } public Customer(Set orders){ this.orders = orders; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getOrders() { return orders; } public void setOrders(Set orders) { this.orders = orders; } }
Order.java
package com.hibernate.model; public class Order { private Long id; private String orderNumber; private Customer customer; // 多对一,通过该变量可以引用到对应的Customer public Order(String orderNumber, Customer customer) { this.orderNumber = orderNumber; this.customer = customer; } public Order(){ } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getOrderNumber() { return orderNumber; } public void setOrderNumber(String orderNumber) { this.orderNumber = orderNumber; } public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } }
Customer.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.hibernate.model.Customer" table="customers"> <id name="id" column="id" type="long"> <generator class="increment"></generator> </id> <property name="name" type="string"> <column name="name" length="15"></column> </property> <!--cascade表示保存或更新customers对象时,会同步保存或更新与之关联的orders对象 --> <!-- 因为Customer类中的orders属性是set类型的,所以下面这样用 --> <!-- inverse为true表示由对方来维护关联关系 --> <set name="orders" cascade="save-update" inverse="true"> <key column="customer_id"></key><!-- key元素设定与所关联的持久化类对应的表单外键--> <one-to-many class="com.hibernate.model.Order"/> </set> </class> </hibernate-mapping>
Order.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.hibernate.model.Order" table="orders"> <id name="id" column="id" type="long"> <generator class="increment"></generator> </id> <property name="orderNumber" type="string"> <column name="order_number" length="15"></column> </property> <many-to-one name="customer" column="customer_id" class="com.hibernate.model.Customer"> </many-to-one> </class> </hibernate-mapping>
在hibernate.cfg.xml文件中加上上面这两个配置文件的映射
<mapping resource="Customer.hbm.xml"></mapping> <mapping resource="Order.hbm.xml"></mapping>
测试
package com.hibernate.util; import java.util.HashSet; import org.hibernate.Session; import org.hibernate.Transaction; import com.hibernate.model.Customer; import com.hibernate.model.Order; public class Test { public static void main(String[] args) { saveCustomerAndOrderWithCascade(); } public static void saveCustomerAndOrderWithCascade() { Session session = HibernateUtil.currentSession(); Transaction tx = null; try { tx = session.beginTransaction(); Customer customer = new Customer("zhangsan", new HashSet()); Order order1 = new Order(); order1.setOrderNumber("zhangsan_order1"); order1.setCustomer(customer); Order order2 = new Order(); order2.setOrderNumber("zhangsan_order2"); order2.setCustomer(customer); Order order3 = new Order(); order3.setOrderNumber("zhangsan_order3"); order3.setCustomer(customer); customer.getOrders().add(order1); customer.getOrders().add(order2); customer.getOrders().add(order3); //只需要customer,与其关联的order都会被保存 session.save(customer); tx.commit(); } catch (Exception e) { e.printStackTrace(); }finally{ HibernateUtil.closeSession(session); } } }
建表脚本
create table categories( id bigint not null, name varchar(15), category_id bigint, primary key(id) ) alter table categories add index idx_category_id (category_id),add constraint fk_category_id foreign key (category_id) references categories(id)
Category.java
package com.hibernate.model; import java.util.Set; public class Category { private Long id; private String name; private Category parentCategory; private Set childCategories; public Category(String name,Category parentCategory,Set childCategories){ this.name = name; this.parentCategory = parentCategory; this.childCategories = childCategories; } public Category(){} public Category(Set childCategories){ this.childCategories = childCategories; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Category getParentCategory() { return parentCategory; } public void setParentCategory(Category parentCategory) { this.parentCategory = parentCategory; } public Set getChildCategories() { return childCategories; } public void setChildCategories(Set childCategories) { this.childCategories = childCategories; } }
Category.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.hibernate.model.Category" table="categories"> <id name="id" column="id" type="long"> <generator class="increment"></generator> </id> <property name="name" type="string"> <column name="name" length="15"></column> </property> <set name="childCategories" cascade="all" inverse="true"> <key column="category_id"></key> <one-to-many class="com.hibernate.model.Category"/> </set> <many-to-one name="parentCategory" column="category_id" class="com.hibernate.model.Category"> </many-to-one> </class> </hibernate-mapping>
级联保存与级联删除
public static void saveCategoryWithCascade(){ Session session = HibernateUtil.currentSession(); Transaction tx = null; try{ tx = session.beginTransaction(); //食品分类 Category foodCategory = new Category("food",null,new HashSet()); //蔬菜分类 Category vegetableCategory = new Category("vegetable",null,new HashSet()); //水果分类 Category fruitCategory = new Category("fruit",null,new HashSet()); //西红柿分类 Category tomotaCategory = new Category("tomota",null,new HashSet()); //苹果分类 Category appleCategory = new Category("apple",null,new HashSet()); //桔子分类 Category orangeCategory = new Category("orange",null,new HashSet()); //设置上下级关系 foodCategory.getChildCategories().add(vegetableCategory); //食品与蔬菜 vegetableCategory.setParentCategory(foodCategory); foodCategory.getChildCategories().add(fruitCategory); //食品与水果 fruitCategory.setParentCategory(foodCategory); vegetableCategory.getChildCategories().add(tomotaCategory);//蔬菜与西红柿 tomotaCategory.setParentCategory(vegetableCategory); fruitCategory.getChildCategories().add(appleCategory); //水果与苹果 appleCategory.setParentCategory(fruitCategory); orangeCategory.getChildCategories().add(orangeCategory); //水果与桔子 orangeCategory.setParentCategory(fruitCategory); session.save(foodCategory); //级联保存所有的关联对象 tx.commit(); }catch (Exception e) { e.printStackTrace(); }finally{ HibernateUtil.closeSession(session); } } //级联删除 public static void deleteCategoryWithCascade(){ Session session = HibernateUtil.currentSession(); Transaction tx = null; try{ tx = session.beginTransaction(); Category category = (Category) session.get(Category.class, new Long(1)); session.delete(category); tx.commit(); }catch (Exception e) { e.printStackTrace(); }finally{ HibernateUtil.closeSession(session); } }
发表评论
-
hibernate(7):hibernate事务
2011-09-17 23:20 641悲观锁是 ... -
hibernate(6):Hibernate的检索策略
2011-09-17 19:49 7331 1 ... -
hibernate(5):域对象在持久化层的三种状态
2011-09-17 18:34 9061 ... -
hibernate(4):hibernate映射关系续
2011-09-17 11:43 1072看完多对一,再来看看一对一的情况: 学生和证件是一对一的关系 ... -
hibernate(2):开始Hibernate之旅
2011-09-10 16:28 933本例将使用struts2和hiberante开发,首选将s ... -
hibernate(1):hibernate入门
2011-09-10 12:45 655...
相关推荐
【标题】"Hibernate教程20_关系映射案例三"主要涵盖了在Hibernate框架中如何进行对象关系映射(ORM)的实践,特别是针对复杂关系的处理。在这个教程中,我们可能会学习到以下关键知识点: 1. **关系映射**:...
内容:hibernate001:通过 XML 配置的基本示例 hibernate002:通过注释配置的基本示例 hibernate003:会话方法练习 hibernate004:组件使用示例 hibernate005:单向关系映射示例 hibernate006:双向关系映射示例 ...
Hibernate对象关系映射一对多 很基础等文档
在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射中的组件映射。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它允许开发人员以面向对象的方式处理数据库操作,极大地简化了数据层...
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
- **定义**: Hibernate 是一款流行的开源对象关系映射(ORM)框架,它简化了数据库与 Java 对象之间的交互过程。 - **版本**: 本书针对 Hibernate 5.0 版本进行了更新和介绍,这是在 Java 社区中广泛使用的最新版本...
Hibernate是Java开发中一个流行的对象关系映射(ORM)工具,它允许开发者用面向对象的方式来操作数据库,而无需过多关注SQL的细节。"初之"暗示了这是面向初学者的内容,主要会讲解如何配置和使用Hibernate进行简单的...
Hibernate4中映射关系图解。
Hibernate_关联关系映射配置详解,希望能帮助广大java爱好者
**标题:“Hibernate关系映射”** 在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate...
Hibernate 是一款强大的开源对象关系映射(ORM)框架,它为Java开发者提供了数据持久化的解决方案,极大地简化了数据库操作。在这个名为“办公自动系统”的案例中,我们可以深入理解Hibernate的核心概念和实际运用。...
Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了Java应用中的数据库操作,使得开发者能够更专注于业务逻辑而不是繁琐的SQL代码。 在Java开发中,持久化是将应用程序中的对象状态保存到持久存储介质...
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的关联关系,...
《精通Hibernate:Java对象持久化技术详解》这本书深入剖析了Hibernate这一流行的Java对象关系映射(ORM)框架,旨在帮助开发者全面理解并熟练掌握Hibernate的使用。Hibernate是Java开发中的重要工具,它简化了...
此外,自定义对象的映射是Hibernate映射中的一个重要部分。通过在实体类上使用@Entity注解,并使用@Id注解指定主键字段,可以将一个Java类映射到数据库的一张表。字段则通过@Column注解来指定列名和属性,如长度、...
标题“Hibernate映射关系配置:XML方式和注解方式”涉及到的是Java持久层框架Hibernate中的一个重要概念——对象关系映射(ORM)。在这个主题中,我们将探讨如何通过XML映射文件和注解来配置Hibernate实体之间的关系...
此外,Hibernate3提供了强大的关联映射功能,如一对一、一对多、多对一和多对多关系,使得处理复杂的数据库关系变得简单。 总的来说,Hibernate3是一个功能强大的ORM工具,简化了Java应用程序与数据库的交互,提高...