hibernate中对象-关联关系分为三种:
1.one-to-one
2.one-to-many/many-to-one
3.many-to-many
其中one-to-many是最主要的一种关联关系,另外两种关联关系可以通过one-to-many或者many-to-one进行扩展.
先来看one-to-one:
User持久化类:
public class User {
private Integer u_id;
private String userName;
//用户对应多个订单,这其中就是一对多得关联关系
private Set<Order> order = new HashSet<Order>();
public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
Order持久化类:
public class Order {
private int orderNum;
private Integer o_id;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Integer getO_id() {
return o_id;
}
public void setO_id(Integer o_id) {
this.o_id = o_id;
}
}
在来看看配置文件:
<hibernate-mapping package="com.lovo">
<class name="User" table="t_user">
<id name="u_id" column="f_user_id" type="integer">
<generator class="identity"></generator>
</id>
<!--这里省略了User,Order类基本属性的映射-->
<!--order是User类中Set集合属性对应字段名-->
<set name="order" cascade="delete" inverse="true">
<!-- 通过订单表定的字段fk_user_id来关联,外键,是字段名,设置级联为delete,保证用户删除同时删除用户订单 -->
<!--inverse="true"将一对多关系中"一"方的维护交给"多方",是一对多关联关系中重要的设置-->
<key column="fk_user_id">
</key>
<!-- 设置一对多的关系 -->
<one-to-many class="Order" />
</set>
Order类的映射配置:
<class name="Order" table="t_order">
<id name="o_id" type="integer" column="f_o_id">
<generator class="identity"></generator>
</id>
<!--建立与User的多对一关联关系,通过一个外键去关联User类 -->
<many-to-one name="user" class="User" column="fk_user_id">
</many-to-one>
用main方法来先建表:
public class CreateTable {
public static void main(String[] args) {
Configuration cfg=new Configuration().configure();
SchemaExport se=new SchemaExport(cfg);
se.create(false, true);
}
}
写的一个得到session的单例类
public class HibernateUtil {
private static SessionFactory sf;
private static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
static {
try{
//// Create the SessionFactory from hibernate.cfg.xml
Configuration cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession() throws HibernateException {
Session session = (Session) threadlocal.get();
if (session == null) {
session = sf.openSession();
threadlocal.set(session);
}
return session;
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadlocal.get();
threadlocal.set(null);
if (session != null) {
session.close();
}
}
}
用JUnit做一个保存方法的单元测试
public class TestUser extends TestCase {
public void testSave() {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
User user=new User();
user.setUserName("fisher");
Order order =new Order();
Order order1=new Order();
order.setOrderNum("100011");
order1.setOrderNum("100012");
//建立双向关联关系,user类中一对多关系,Order类中多对一关系
user.getOrder().add(order);
order1.setUser(user);
order.setUser(user);
tx.commit();
HibernateUtil.closeSession();
}
}
分享到:
相关推荐
2. `@OneToMany`:一对多关系,一个实体可以有多个相关联的实体。 3. `@ManyToOne`:多对一关系,多个实体对应另一个实体的单一实例。 4. `@ManyToMany`:多对多关系,多个实体可以关联多个其他实体,通常需要一个...
- 对象关系映射:将Java对象与数据库表建立一对一、一对多、多对一、多对多的映射关系。 - 缓存机制:提供第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),提高性能。 - 支持懒加载和立即加载:...
- Hibernate支持一对多、一对一、多对一、多对多等各种关联关系的映射,通过hbm.xml文件配置。 5. **继承映射**: - 支持类继承关系的映射,可以将子类对象的数据存储在同一个表或者不同的表中。 6. **集合映射*...
- 可能会包含对复杂关联关系的处理,如多对一、一对多、多对多关系的映射。 - 可能涉及到Hibernate与其他技术的整合,如Spring、MyBatis等。 7. **进阶话题** - **Hibernate逆向工程**: 自动根据数据库表生成...
- **一对多与多对多映射**: - 在实体类设计时,通过关联属性定义一对多或多对多的关系。 - 在 XML 映射文件中使用 `<one-to-many>` 或 `<many-to-many>` 标签来配置这些关系。 - **查询操作**: - 使用 HQL...
hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式
- **一对多映射**: 通常在父类中定义一个集合属性来表示子类的集合。 - **多对多映射**: 通常需要一个额外的关联表来维护双方之间的关系。 **2.3 继承关系映射** - **一个类一个表**(`single-table`): 所有的子类都...
根据提供的信息,我们可以总结出以下关于达内HIBERNATE学习笔记的重要知识点: ### 第一章:Hibernate入门 #### 1.1 学习目标 - 理解Hibernate的基本概念。 - 掌握如何使用Hibernate进行开发。 #### 1.2 对象持久...
在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....
- **一对多映射**:通过 `@OneToMany` 或 `@ManyToOne` 实现。 - **多对一映射**:通常使用 `@ManyToOne` 实现。 - **多对多映射**:通过 `@ManyToMany` 实现。 #### 九、Hibernate 查询(HQL) - **HQL**:...
例如,一对一、一对多、多对一、多对多的关系都可以通过配置文件或注解进行映射。通过这种方式,我们可以在Java对象之间直接操作相关联的数据,而无需关心底层的SQL。 在Struts等MVC框架中整合Hibernate,可以构建...
- **一对多映射**:使用`@OneToMany`注解实现。 - **多对一映射**:使用`@ManyToOne`注解实现。 - **多对多映射**:使用`@ManyToMany`注解实现。 #### 九、Hibernate查询(HQL) - **知识点概述**: - **HQL...
- **关联映射**:一对一、一对多、多对一、多对多关系的映射处理。 - **懒加载与立即加载**:理解不同加载策略的影响。 通过以上内容的学习,你将能够熟练掌握Hibernate的使用,实现高效、便捷的数据库操作。在实际...
描述:本篇笔记深入探讨了Hibernate框架中一对多关系的映射及持久化对象状态管理,结合个人理解与实践经验,旨在为读者提供一份详实的学习资料。 ### 一、一对多关系映射详解 在Hibernate框架中,一对多关系是一种...
【hibernate学习笔记】 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它极大地简化...在实践中,还需要熟悉Criteria查询、HQL语言、事务管理、缓存策略以及多对一、一对多、多对多等关系映射的配置。