Hibernate一对多关系映射

本文详细介绍了Hibernate中的一对多关系映射,包括基于*.hbm.xml文件和基于Annotation的配置方法。通过实例展示了如何配置和操作一对多关系,如级联操作、延迟加载等,并探讨了性能和最佳实践。
摘要由CSDN通过智能技术生成

第十三章Hibernate一对多关系映射

一对多是在项目开发之中最为常见的一个功能,也就是指在所有的映射里面,一对多设计是首先要思考。例如:现在管理员可以进行新闻的发布,那么一个管理员可以发布多条新闻,这就是一个典型的一对多关系。

范例:数据库创建脚本

-- 使用数据库

USE mldn ;

-- 删除数据表

DROP TABLE news ;

DROP TABLE admin ;

-- 创建数据表

CREATE TABLE admin(

       adminid                        VARCHAR(30) ,

       password               VARCHAR(32) ,

       CONSTRAINT pk_adminid PRIMARY KEY(adminid)

) ;

CREATE TABLE news(

       nid                               INT                AUTO_INCREMENT ,

       title                       VARCHAR(30) ,

       pubdate                        TIMESTAMP ,

       content                         TEXT ,

       adminid                        VARCHAR(30) ,

       CONSTRAINT pk_nid PRIMARY KEY(nid) ,

       CONSTRAINT fk_adminid FOREIGN KEY(adminid) REFERENCES admin(adminid) ON DELETE CASCADE

) ;

在这样的关系之中,取得管理员的时候应该可以取得相应的新闻,也有可能不取得新闻。

13.1、基于*.hbm.xml文件的配置

为项目添加Hibernate支持同时选择好两张数据表并且生成映射。

范例:观察Admin.java类

package cn.cgj.pojo;

import java.util.HashSet;

import java.util.Set;

@SuppressWarnings("serial")

public class Admin implements java.io.Serializable {

    private String adminid;

    private String password;

    @SuppressWarnings("rawtypes")

    private Set newses = new HashSet(0);

    public Admin() {

    }

    //settergetter

}

      这种设计是一种最为明显的设计,一个管理员可以发布多条新闻,而所条新闻就使用set集合表示。

范例:观察News.java类

package cn.cgj.pojo;

import java.sql.Timestamp;

@SuppressWarnings("serial")

public class News implements java.io.Serializable {

   private Integer nid;

   private Admin admin;

   private String title;

   private Timestamp pubdate;

   private String content;

   public News() {

   }

   //settergetter

}

      这种设计在之前的JDBC实现DAO的过程中都有所讲解。POJO类的设计完成之后,下面关键的地方在于配置文件上。

范例:观察admin.hbm.xml文件

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="cn.cgj.pojo.Admin" table="admin" catalog="mldn">

        <id name="adminid" type="java.lang.String">

            <column name="adminid" length="30" />

            <generator class="assigned"></generator>

        </id>

        <property name="password" type="java.lang.String">

            <column name="password" length="32" />

        </property>

        <!-- 此处定义的集合,表示一对多的关系映射,此处的Admin中的adminid的信息由news维护 -->

        <set name="newses" inverse="true">

            <key> <!-- 两张表之间关联的操作列 -->

                <column name="adminid" length="30" />

            </key>    <!-- 在一对多的关系里面,多的一方对应的类型 -->

            <one-to-many class="cn.cgj.pojo.News" />

        </set>

    </class>

</hibernate-mapping>

范例:观察News.hbm.xml文件

<?xml version="1.0" encoding="utf-8"?>

<!

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值