annotation方式:
一、编写一方类
@Entity
public class Group {
private int id;
private String name;
private Set<User> users =new HashSet<User>();
@Id
@GeneratedValue
public int getId() {
return id;
}
@OneToMany(mappedBy="group")
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
针对本类来讲@OneToMany(mappedBy="group"),mappedBy是设置对方即多方的属性(不是自己的属性)为主导
二、编写多方的类
@Entity
public class User {
private int id;
private String name;
private Group group;
@Id
@GeneratedValue
public int getId() {
return id;
}
@ManyToOne
public Group getGroup() {
return group;
}
public String getName() {
return name;
}
public void setGroup(Group group) {
this.group = group;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
针对本类来讲@ManyToOne
三、设置hibernate.cfg.xml
<mapping class="org.hibernate.tutorial.domain.Group"/>
<mapping class="org.hibernate.tutorial.domain.User"/>
四、测试结果
create table Group (
group_Id integer not null auto_increment,
name varchar(255),
primary key (group_Id)
)
create table User (
User_ID integer not null auto_increment,
name varchar(255),
groupID integer,
primary key (User_ID)
)
alter table User
add index FK_k6brud1jwhinw4g4f6yafcqjm (groupID),
add constraint FK_k6brud1jwhinw4g4f6yafcqjm
foreign key (groupID)
references Group (group_Id)
注意:双向必设置mappedby,减少冗余字段,且以对方属性为主导
xml方式:
一、编写如上两个实体类
二、配置一方Group.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="Group" table="Group">
<id name="id" column="group_Id">
<generator class="native"/>
</id>
<property name="name"></property>
<set name="users">
<key column="groupID"></key>
<one-to-many class="org.hibernate.tutorial.domain.User" />
</set>
</class>
</hibernate-mapping>
配置本类集合属性users,以groupID为多方外键列名(双向:必与一方配置列名一致),配置多方类
三、配置多方User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.hibernate.tutorial.domain">
<class name="User" table="User">
<id name="id" column="User_ID">
<generator class="native"/>
</id>
<property name="name"></property>
<many-to-one name="group" column="groupID"></many-to-one>
</class>
</hibernate-mapping>
配置本类属性group,以groupID为本类(多方)外键列名(必必一方配置列名一致)
四、设置hibernate.cfg.xml
<mapping resource="org/hibernate/tutorial/domain/Group.hbm.xml"/>
<mapping resource="org/hibernate/tutorial/domain/User.hbm.xml"/>
五、测试如上
分享到:
相关推荐
总之,理解和熟练运用Hibernate的一对多、多对一以及双向关联,是提升Java企业级应用开发效率的关键。通过注解或XML配置,开发者可以灵活地定义实体间的关联,实现数据的持久化。同时,注意级联操作、懒加载策略等...
在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...
本主题将深入探讨使用Hibernate进行多对多双向关联的实现,既可以通过注解(Annotation)方式,也可以通过XML配置文件来完成。 首先,我们来看多对多关联的基本概念。在数据库设计中,当两个实体之间存在多个实例...
本案例主要探讨的是Hibernate 4.3.8版本中如何使用注解和XML配置实现一对多的双向关联关系。这种关系在实际的业务场景中十分常见,例如一个用户可以有多个订单,一个订单对应一个用户。 首先,我们来看一下注解的...
同时,还需要在`Teacher`类中添加一个`List<Student>`字段,用`@OneToMany`注解来实现一对多关系,形成双向关联。 3. **多对多关系**: 学生和班级的关系可以是多对多,因为一个学生可以属于多个班级,反过来,一...
根据给定文件的信息,本文将详细介绍...以上内容仅覆盖了一对一的几种常见关联方式及其配置方法,接下来还可以进一步探讨其他类型的关系映射,包括一对多、多对多等,以及这些关系在Hibernate中的具体实现方式。
- 使用`@OneToMany`注解进行一对多映射配置。 - **多对多映射**: - 使用`@ManyToMany`注解进行多对多映射配置。 - **次级表映射**: - 使用`@SecondaryTables`或`@SecondaryTable`注解来指定多个表之间的关系。...
在Java持久化框架Hibernate中,一对多映射...总之,Hibernate的一对多映射配置提供了灵活的方式,允许开发者根据需求选择XML或注解方式进行关联实体的定义。理解并正确配置这些关系对于实现高效的数据库操作至关重要。
- `@OneToMany`表示一对多的关系,一个实体可以有多个子实体。 - `@ManyToMany`表示多对多的关系,两个实体类之间可以有多条双向连接。 4. 集合映射注解:`@ElementCollection`用于非关联对象的集合,如字符串或...
`mappedBy`在双向一对多或多对一关系中使用,表示关系的维护者。它用于指定哪个实体负责维护关联关系,通常放在不拥有外键的一方。 使用Hibernate的注解,开发者可以更直观地理解对象与数据库的关系,并减少XML...
- **@OneToMany**: 一对多关联,通常需要配合`@JoinColumn`或`@JoinTable`指定关联信息。 - **@ManyToOne**: 多对一关联,通常需要配合`@JoinColumn`指定关联信息。 - **@ManyToMany**: 多对多关联,需要通过中间表...
8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件(Component)映射 9.1. 依赖对象(Dependent objects) 9.2. 在集合中出现的依赖...
一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件(Component)映射 9.1. 依赖对象(Dependent objects) 9.2. 在集合中出现的依赖对象 ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...
8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件(Component)映射 9.1. 依赖对象(Dependent objects) 9.2. 在集合中出现的依赖...
8.4.1. 一对多(one to many) / 多对一(many to one) 8.4.2. 一对一(one to one) 8.5. 使用连接表的双向关联(Bidirectional associations with join tables) 8.5.1. 一对多(one to many) /多对一( many ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...