Hibernate映射一对多关系
Customer.java
package org.model;
import java.util.Set;
public class Customer {
private int c_id;//主键
private String c_name;
private Set orders;//一对多关系,然后持有Set集合
public int getC_id() {
return c_id;
}
public String getC_name() {
return c_name;
}
public Set getOrders() {
return orders;
}
public void setC_id(int c_id) {
this.c_id = c_id;
}
public void setC_name(String c_name) {
this.c_name = c_name;
}
public void setOrders(Set orders) {
this.orders = orders;
}
}
Order.java
package org.model;
public class Order {
private Customer customer;//一个订单对一个顾客
private int o_id;
private String o_number;
public Customer getCustomer() {
return customer;
}
public int getO_id() {
return o_id;
}
public String getO_number() {
return o_number;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public void setO_id(int o_id) {
this.o_id = o_id;
}
public void setO_number(String o_number) {
this.o_number = o_number;
}
}
类写好,下一步是配置文件
Customer.hbm.xml【一对多关联】
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.model.Customer" table="customer">
<id name="c_id" column="u_id" >
<generator class="increment"></generator>
</id>
<property name="c_name" type="string" >
<column name="u_name" length="15"/>
</property>
<set name="orders" cascade="all" inverse="true" lazy="false">
<key column="customer_id"></key>
<one-to-many class="org.model.Order" /><!-- set元素类型order类型得 -->
</set>
</class>
</hibernate-mapping>
主键生成策略是自增increment
<set>元素表明orders这个属性是Set类型 cascade是级联属性 默认值为none,类似数据库中的级联操作 lazy指的是是否延迟检索
key子元素表明通过外键customer_id参照customer表
one to many 命名存储的是一组Order对象
Order.hbm.xml【多对一关联】
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.model.Order" table="order1">
<id name="o_id" column="o_id" >
<generator class="increment"></generator>
</id>
<property name="o_number" type="string" >
<column name="o_number" length="15"></column>
</property>
<many-to-one name="customer" class="org.model.Customer" column="customer_id"></many-to-one>
</class>
</hibernate-mapping>
可能我们会以为应该这么配置<property name="customer" column="customer_id">
解释:显然这个是错的,customer是一个类类型,而customer_id是一个整型,这当然是不匹配的,要使用<many-to-one>多对一
name:属性名 class:类名 not-null 如果为true 表示customer属性不允许为null---对应数据库就是加一个not null约束 还会影响运行时行为 是null么?有检验机制
Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: org.model.Order.customer
【爆出这个异常】
hibernate帮我们产生的建立表的sql语句如下:
create table customer (u_id integer not null, u_name varchar(15), primary key (u_id))
create table order1 (o_id integer not null, o_number varchar(15), customer_id integer, primary key (o_id))
alter table order1 add index FKC3DF62A3D5851A89 (customer_id), add constraint FKC3DF62A3D5851A89 foreign key (customer_id) references customer (u_id)
相关推荐
本篇将重点讲解Hibernate如何处理四种基本的关系映射:一对一、一对多、多对一以及多对多,并以华南银行项目的实际例子进行阐述。 首先,我们来理解一对一(One-to-One)映射。在数据库设计中,一对一关系通常出现...
对于关联关系的操作,如保存一对多关系,通常需要先保存主对象,再保存从对象,确保外键的正确设置。 **总结** 总的来说,Hibernate对象关系映射实例提供了理解并实践数据库关系映射到Java对象的方法。从一对一、...
总之,Hibernate的一对一、一对多和多对多关系映射是Java开发中的重要概念,它们为对象模型提供了与数据库模型之间的桥梁。通过对这些关系的理解和实践,你可以更好地掌握Hibernate框架,从而在项目开发中发挥出更大...
本教程将重点讲解如何在Hibernate中实现多对一的映射关系,采用的是注解方式进行配置。 **一、多对一关系** 在数据库设计中,多对一关系表示一个实体可以与另一个实体的多个实例相关联。例如,一个部门可以有多名...
本教程将重点讲解如何在Hibernate中实现多对多双向关联,这是数据库设计中常见的一种关系类型,它允许一个实体实例与多个其他实体实例相互关联。 在数据库设计中,多对多关系意味着一个表的记录可以与另一个表的多...
为了正确地映射一对多的关系,我们需要在数据库端进行相应的表结构设计。 ```sql -- 删除原有的外键约束 ALTER TABLE ORDERS DROP FOREIGN KEY FK8B7256E516B4891C; -- 删除表 DROP TABLE IF EXISTS CUSTOMERS; ...
【hibernate 一对多测试工程】是一个基于Hibernate框架的示例项目,旨在演示和测试Hibernate在处理一对一和一对多关系映射时的功能和用法。在这个工程中,我们可以通过具体的代码实例深入理解如何配置和操作数据库中...
本文将深入探讨Hibernate中的一对多关系,并重点解析`inverse`属性的作用及其应用。 一对多关系是数据库设计中常见的关联类型,例如一个用户可以拥有多个订单,一个班级可以包含多个学生等。在Hibernate中,通过...
Hibernate 支持多种数据库表之间的关系映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。通过 `<one-to-one>`、`<list>`、`<set>` 等元素可以定义这些关系,并指定...
在这个项目中,我们将重点探讨Hibernate中的一对多关联关系,并结合MySQL数据库进行实践。 一、Hibernate一对多关联关系 在关系型数据库中,一对多关联是指一个表中的记录可以与另一个表中的多个记录相关联。例如,...
本文将重点讨论其中的一对多和多对一关联关系,并通过具体的Customer和Order示例进行详细讲解。 一对多关联关系表示一个实体可以与零个或多个其他实体相关联。在这个例子中,每个Customer可以有多个Order,而每个...
这里我们重点关注一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)关系。 1. 一对一关系(One-to-One): - 主键关联:一个实体对象对应另一个实体对象的一个实例,通常通过主键共享。例如,...
- **一对多(One-to-Many)**: 一个实体对应多个实体,@OneToMany注解用于父类,@ManyToOne注解用于子类。 - **多对多(Many-to-Many)**: 多个实体对应多个实体,通过中间表实现,@ManyToMany注解。 8. **延迟...
尽管这个文件名“Hibernate_onetomany_Oracle实例 12.27”看起来像是一个关于一对多关系的示例,而不是一对一,我们可以假设它可能是错误的,或者包含了一个包含一对一和一对多关系的综合示例。通常,一对一关系是指...
### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。...希望本文能对你理解Hibernate的多表联合查询有所帮助。
案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有... 一对一、多对一、一对多、多对多等几种情况。
4. **Hibernate_04**: 这一阶段深入到一对多(One-to-Many)和多对一(Many-to-One)的关系映射。通过@OneToMany、@ManyToOne注解,以及@JoinColumn和@JoinTable的使用,学习如何在实体间建立关联,实现数据的级联...
2. **关联映射**:Hibernate支持多种关系映射,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)。这部分可能详细解释了这些关系的配置,以及在Java对象和数据库表...
Hibernate支持一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)四种关系映射。例如,一个用户可以有多个订单,订单也可以属于多个用户,这种关系就需要用到@OneToMany和@...
3. **映射策略**:详细阐述了 Hibernate 中的多种映射策略,例如一对一、一对多、多对多等映射方式,并提供了相应的示例代码。 4. **查询语言**:重点介绍了 Hibernate 查询语言(HQL)的使用方法,以及如何通过 ...