Customers表(一) 对 Orders表(多)
1.那么Orders表中就有Customers表的主键,也就是说Orders表的外键是
Customers表的主键
2.打开Orders表对应的VO:AbstractOrders.java文件,删除外键(Customers表
的主键)的Set(),Get()方法
3.创建一个类型为Customers对象的属性
4.配置Orders.hbm.xml映射文件。将 将<property name="customerId"
column="CUSTOMER_ID" type="java.lang.Long" />
改为<many-to-one name="customers" column="CUSTOMER_ID"
class="com.Customers" not-null="true" />
2---4步 MyEclipse4已经为我们全部自动生成!!!不用自己设置!
一对多双关联关系:
1。修改 Customers 对像(AbstractCustomers.java文件)增加一 orders 属性,
代码如下:private Set orders = new HashSet();跟Set(),Get()方法;
2、修改配置映射文件(Customers.hbm.xml)
在<property...>后面跟</class>前面加上
<set
name="orders"
cascade="save-update">
<key column="CUSTOMER_ID" />
<one-to-many class="com.Orders" />
</set>
级联保存
原文件内容:
<many-to-one
name="customers"
column="CUSTOMER_ID"
class="com.Customers"
not-null="true" />
修改为: 绿色字体部份为增加之处
<many-to-one
name="customers"
column="CUSTOMER_ID"
class="com.Customers"
cascade="save-update"
not-null="true" />
//session.save(customers); 将此部份将关闭
映射一对多双关联关系
1。修改 Customers 对像(AbstractCustomers.java文件)
增加一 orders 属性,代码如下:
private Set orders = new HashSet();
这样配置以后如果要查询 Customers 所对应的所有 Orders 对像,只需要调用customer.getOrders()方法。
2。修改配置映射文件(Customers.hbm.xml)
源文件片断:(绿色字体为新增部份)
<class name="Customers" table="customers">
<id name="id" column="ID" type="java.lang.Long">
<generator class="increment"/>
</id>
<property name="name" column="NAME" type="java.lang.String" />
<property name="age" column="AGE" type="java.lang.Integer" />
<set
name="orders"
cascade="save-update">
<key column="CUSTOMER_ID" />
<one-to-many class="com.Orders" />
</set>
</class>
MyEclipse已经为我们建立好第一跟第二步了,只需在第二步加上cascade="save-update"属性就行了!
3。修改 Orders 对你的 equals 和 hashCode 方法
public int hashCode() {
if (this.hashValue == 0) {
int result = 17;
int idValue = this.getId() == null ? 0 : this.getId().hashCode();
result = result * 37 + idValue;
idValue = this.getOrderNumber() == null ? 0 : this.getCustomers()
.hashCode();
result = result * 37 + idValue;
idValue = this.getPrice() == null ? 0 : this.getPrice().hashCode();
result = result * 37 + idValue;
idValue = this.getCustomers() == null ? 0 : this.getCustomers()
.hashCode();
result = result * 37 + idValue;
this.hashValue = result;
}
return this.hashValue;
}
public boolean equals(Object rhs) {
if (rhs == null)
return false;
if (!(rhs instanceof Orders))
return false;
Orders that = (Orders) rhs;
if (this.getId() != null && that.getId() != null) {
if (!this.getId().equals(that.getId()))
return false;
if (!this.getOrderNumber().equals(that.getOrderNumber()))
return false;
if (!this.getPrice().equals(that.getPrice()))
return false;
if (!this.getCustomers().equals(that.getCustomers()))
return false;
}
return true;
}
在这里修改 equals 和 hashCode 方法的目的是为了使用Orders orders1 = new Orders()方法时和 Orders orders2 = new Orders() 创建的这两个 Orders 对你为两个不同的对像,如果不增加这几个判断,当创建新的 Orders 对像时,因为 Orders对像的 ID属性值为 null ,当创建第二个 Orders对像时,它的 ID属性值也为 null,hibernate 会将它们认为是同一个对像,当执行session.save()方法时只会保存一个orders对像。
级联查询、级联修改、级联删除都有一个参数“customer_id”可以指定将要查询的Customers对像的ID值
修改 Customers.hbm.xml 文件,绿色字体就修改部份
<set
name="orders"
cascade="all-delete-orphan"
inverse="true">
<key column="CUSTOMER_ID" />
<one-to-many class="com.Orders" />
</set>
cascade="all-delete-orphan"这一设定值代表可以执行所有有联级方法,如保存、删除
分享到:
相关推荐
本实例将聚焦于Hibernate中的一对多关系,这是一种常见的关联类型,尤其是在处理具有层次结构的数据时。双向一对多关系意味着一个实体可以拥有多个相关联的实体,同时每个相关联的实体也可以回指到原始实体。 **...
通常情况下,一个人可能属于一个或多个组织,而一个组织也可以包含多个人员,这就构成了数据库设计中的一对多关系。在Hibernate中,我们可以使用`@ManyToOne`和`@OneToMany`注解来定义这种关联。 在`person`实体类...
在Hibernate中,这种关系通常通过中间表或关联表来实现,它存储了双方实体的主键,形成两个一对多的关系。 **二、Hibernate多对多映射** 在Hibernate中,实现多对多映射主要涉及以下两个方面: 1. **配置映射文件...
在Java的持久化框架Hibernate中,处理数据库中的多对多关系是一项重要的任务。"角色(使用hibernate映射多对多的关系).zip"这个压缩包文件提供了一个实例,展示了如何利用Hibernate来映射数据库中的多对多关联。在...
最后,`one-to-many(5.5)`可能是关于Hibernate 5.5版本中的一对多关系的进一步讲解,可能涉及到了该版本的一些新特性或最佳实践。 综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一...
博客:http://blog.csdn.net/smilefyx/article/details/48634737
如果使用XML配置,需要在User和Role的映射文件中添加对应的`<set>`标签来描述多对多关系。 **四、操作示例** 1. **添加数据** 可以通过Session的`save()`或`saveOrUpdate()`方法添加新的User和Role实例,Hibernate...
在本文中,我们将详细介绍Hibernate一对一唯一外键关联映射的概念、配置方法和实践应用。 一对一唯一外键关联映射的概念 在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键...
在这个"hibernate一对多关系"的资源中,我们主要探讨的是Hibernate如何处理一个实体类与多个实体类之间的关联关系。 在数据库设计中,一对多关系是非常常见的一种关系类型,比如一个部门可以有多个员工,一个学生...
在JavaEE开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化...通过分析这些代码,你将能更好地掌握Hibernate一对多关系的配置和使用。同时,也可以尝试修改配置或业务逻辑,以加深理解和应用。
2. 一对多关系(One-to-Many): - 一个实体对象可以对应多个其他实体对象的实例,通常在多方的一端使用`List`或`Set`来存储关联对象。映射文件中使用`set`或`list`元素表示这种关系。 3. 多对多关系(Many-to-...
例如,表示用户与角色的一对多关系: ```java @ManyToOne @JoinColumn(name="ROLE_ID") private Role role; ``` 四、继承策略注解 1. `@Inheritance`和`@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`...
描述中的链接指向了一篇由“fangguanhong”在iteye博客上发表的文章,虽然具体内容没有提供,但我们可以根据标题推测该文章可能详细讲解了一个具体的Hibernate一对多关系的实现步骤和示例代码。 在Java的Hibernate...
在示例代码中,我们看到了两个实体,`Classes`和`Student`,它们之间的是一对多关系。`Classes`拥有一个`Set`类型的`students`属性,而`Student`有一个`classes`属性引用`Classes`。在映射文件中,可以选择性地为...
6. **一对多、多对一关系映射**:讲解如何配置和管理对象之间的关联,如一个用户可以有多个订单(一对一到多),以及一个订单只有一个用户(多对一)。 7. **多对多关系映射**:深入探讨复杂的关系映射,如一篇文章...
八、一对多、多对一、多对多关系映射 这些关系映射在实体类中通过注解(如@OneToMany、@ManyToOne、@ManyToMany)或XML映射文件定义,Hibernate会自动处理关联对象的保存和加载。 九、延迟加载(Lazy Loading) ...
在高级主题部分,书中涵盖了Hibernate的缓存机制、性能优化策略、多对多和一对一、一对多关系的处理、以及复杂的关联映射。这些内容对于解决实际项目中的复杂问题至关重要。 最后,书中还涉及到了Hibernate与其他...
总结来说,"hibernateORM1-n映射"是关于如何在Hibernate框架下建立和管理数据库中一对多关系的知识。理解和熟练运用这一映射机制,将有助于提高Java应用的数据库操作效率,减少代码量,增强程序的可维护性。通过正确...
- 选择合适的映射策略:对于频繁查询的一对多关系,可以考虑使用集合的延迟加载(fetch=FetchType.LAZY);对于多对一关系,如果总是成对出现,可以考虑使用联合主键或单向关联。 - 使用二级缓存:通过配置...