hibernate 一对一实践

57、使用Hibernate进行多对一和一对一映射的最佳实践 本文深入探讨了在Hibernate中实现多对一和一对一关联映射的最佳实践,涵盖了使用外键与连接表的实现方式、级联操作、懒加载机制以及性能优化策略。文章还详细解析了如何确保数据完整性,并通过具体代码示例展示了XML配置文件和JPA注解的不同实现方式。此外,针对复杂查询和并发控制也提供了相应的解决方案,帮助开发者高效地处理关联实体之间的交互逻辑。 阅读详情

hibernate 一对一实践

最近做的一个工程要用到hibernate的一对一关联,比如论坛的一个主题对应一个作者。
hibernate的一对一关系有两种形式,一种是共享主键方式,另一种是惟一外键方式,因为这里用到的是在主题表里与作者表之间的对应关系,所以介绍的是惟一外键方式的一以一关联。
由于网上很多教程都说得不清楚,给出的实例不能正确运行,所以写下这份笔记,以便以后查询,并与大家分享,如有不对的地方请指正。
本测试使用mysql数据库,eclipse2.1平台,使用tanghan插件生成hbm文件。

1、新建数据库表如下:
    CREATE TABLE `author` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(50) default NULL,
      PRIMARY KEY  (`id`)
    );
    CREATE TABLE `topic` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(50) default NULL,
      `user_id` int(11) default NULL,
      PRIMARY KEY  (`id`)
    );

2、用tanghan建立数据库连接,并对这两个表生成相应的hbm文件(也可以手工编写这些文件)。
Topic.hbm.xml文件如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping>
    <class name="model.Topic" table="topic">
    <id column="id" length="11" name="id" type="integer">
    <generator class="native"/>
    </id>
    <property column="name" length="50" name="name" type="string"/>
    <property column="user_id" length="11" name="user_id" type="integer"/>
    </class>
    </hibernate-mapping>
   
Author.hbm.xml文件如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping>
    <class name="model.Author" table="author">
    <id column="id" length="11" name="id" type="integer">
    <generator class="native"/>
    </id>
    <property column="name" length="50" name="name" type="string"/>
    </class>
    </hibernate-mapping>
   
Author.java文件如下:
    package model;
   
    import java.io.Serializable;
    import org.apache.commons.lang.builder.EqualsBuilder;
    import org.apache.commons.lang.builder.HashCodeBuilder;
    import org.apache.commons.lang.builder.ToStringBuilder;
   
    /** @author Hibernate CodeGenerator */
    public class Author implements Serializable {
   
        /** identifier field */
        private int id;
   
        /** nullable persistent field */
        private String name;
   
        /** full constructor */
        public Author(java.lang.String name) {
            this.name = name;
        }
   
        /** default constructor */
        public Author() {
        }
   
        public int getId() {
            return this.id;
        }
   
     public void setId(int id) {
      this.id = id;
     }
   
        public java.lang.String getName() {
            return this.name;
        }
   
     public void setName(java.lang.String name) {
      this.name = name;
     }
   
        public String toString() {
            return new ToStringBuilder(this)
                .append("id", getId())
                .toString();
        }
   
        public boolean equals(Object other) {
            if ( !(other instanceof Author) ) return false;
            Author castOther = (Author) other;
            return new EqualsBuilder()
                .append(this.getId(), castOther.getId())
                .isEquals();
        }
   
        public int hashCode() {
            return new HashCodeBuilder()
                .append(getId())
                .toHashCode();
        }
   
    }
   
Topic.java文件如下:
    package model;
   
    import java.io.Serializable;
    import org.apache.commons.lang.builder.EqualsBuilder;
    import org.apache.commons.lang.builder.HashCodeBuilder;
    import org.apache.commons.lang.builder.ToStringBuilder;
   
    /** @author Hibernate CodeGenerator */
    public class Topic implements Serializable {
   
        /** identifier field */
        private int id;
   
        /** nullable persistent field */
        private String name;
   
        /** nullable persistent field */
        private int user_id;
   
        /** full constructor */
        public Topic(java.lang.String name, int user_id) {
            this.name = name;
            this.user_id = user_id;
        }
   
        /** default constructor */
        public Topic() {
        }
   
        public int getId() {
            return this.id;
        }
   
     public void setId(int id) {
      this.id = id;
     }
   
        public java.lang.String getName() {
            return this.name;
        }
   
     public void setName(java.lang.String name) {
      this.name = name;
     }
   
        public int getUser_id() {
            return this.user_id;
        }
   
     public void setUser_id(int user_id) {
      this.user_id = user_id;
     }
   
        public String toString() {
            return new ToStringBuilder(this)
                .append("id", getId())
                .toString();
        }
   
        public boolean equals(Object other) {
            if ( !(other instanceof Topic) ) return false;
            Topic castOther = (Topic) other;
            return new EqualsBuilder()
                .append(this.getId(), castOther.getId())
                .isEquals();
        }
   
        public int hashCode() {
            return new HashCodeBuilder()
                .append(getId())
                .toHashCode();
        }
   
    }

3、修改Topic.java文件。
找到 private int user_id;
修改成private Author author;
找到 构造函数public Topic(java.lang.String name, int user_id),把参数int user_id改为Author author, 把函数里的this.user_id = user_id; 改为this.author = author;
找到以下两个函数
      public int getUser_id() {
        return this.user_id;
      }
   
     public void setUser_id(int user_id) {
      this.user_id = user_id;
     }
修改为
     public Author getAuthor() {
      return author;
     }
   
     public void setAuthor(Author author) {
      this.author = author;
     }
然后保存。以上文件保存在model包里。

4、修改Topic.hbm.xml文件。
删除下面这行
<property column="user_id" length="11" name="user_id" type="integer"/>
在</class>前添回<many-to-one>项如下
<many-to-one name="author" class="model.Author" column="user_id" unique="true"/>

通过以上操作就建立了Topic表与Author表之间的单向一对一关系,因为本工程中只需要从主题表去了解作者的信息,所以只需要单向的一对一就可以完成了。

5、建立测试用例。
1)、新建test包,在test包内建立HibernateUtil类。
    /*
     * 创建日期 2005-8-4
     *
     * TODO 要更改此生成的文件的模板,请转至
     * 窗口 - 首选项 - Java - 代码样式 - 代码模板
     */
    package test;
   
    /**
     * @author hjack<br>
     *
     * TODO 要更改此生成的类型注释的模板,请转至
     * 窗口 - 首选项 - Java - 代码样式 - 代码模板
     */
   
   
    import net.sf.hibernate.HibernateException;
    import net.sf.hibernate.Session;
    import net.sf.hibernate.SessionFactory;
    import net.sf.hibernate.cfg.Configuration;
   
    public class HibernateUtil {
   
     private static final SessionFactory sessionFactory;
     private static Configuration cfg = null;
   
     static {
      try {
       cfg = new Configuration();
       sessionFactory =cfg.configure().buildSessionFactory();
      } catch (HibernateException ex) {
       throw new RuntimeException(
        "Exception building SessionFactory: " + ex.getMessage(),
        ex);
      }
     }
   
     public static final ThreadLocal session = new ThreadLocal();
   
     public static Session currentSession() throws HibernateException {
      Session s = (Session) session.get();
      // Open a new Session, if this Thread has none yet
      if (s == null) {
       s = sessionFactory.openSession();
       session.set(s);
      }
      return s;
     }
   
     public static void closeSession() throws HibernateException {
      Session s = (Session) session.get();
      session.set(null);
      if (s != null)
       s.close();
     }
    }
   
hibernate.cfg.xml文件内容如下:
    <!DOCTYPE hibernate-configuration PUBLIC
     "-//Hibernate/Hibernate Configuration DTD//EN"
     "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
    <hibernate-configuration>
     <session-factory>
      <!--<property name="connection.datasource">java:comp/env/jdbc/mysql</property>-->
      <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="connection.url">jdbc:mysql://localhost/testhibernate</property>
      <property name="connection.username">root</property>
      <property name="connection.password"></property>
      <property name="show_sql">true</property>
      <!--mapping files-->
      <mapping resource="model/Author.hbm.xml"></mapping>
      <mapping resource="model/Topic.hbm.xml"></mapping>
     </session-factory>
    </hibernate-configuration>   

2)、新建Test类,用于测试。
    /*
     * 创建日期 2005-8-10
     *
     * 更改所生成文件模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    package test;
   
    import model.Author;
    import model.Topic;
    import net.sf.hibernate.HibernateException;
    import net.sf.hibernate.Session;
    import net.sf.hibernate.Transaction;
   
    /**
     * @author hjack
    
     * 更改所生成类型注释的模板为
     * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
     */
    public class Test {
   
     Session sess;
     Transaction tx;
     
     public void insertTopic(Topic topic,int userID) throws HibernateException{
      try{
       sess = HibernateUtil.currentSession();
       tx = sess.beginTransaction();
       //新建一个author对象,并把作者id置入该对象里。   
       Author author = new Author();
       author.setId(userID);   
       //新建一个topic对象,设置用户名和把author对象set进去。
       topic.setAuthor(author);
       //因为只是插入一个话题,并不必在author表中插入一条记录,所以只需save(topic)   
       sess.save(topic);
       tx.commit();
      }catch(HibernateException e){
       System.out.println(e.toString());
      }finally{
       if(tx!=null){
        tx.rollback();
       }
       HibernateUtil.closeSession();
      }
     }
     
     public void insertAuthor(Author author) throws HibernateException{
      try{
       sess = HibernateUtil.currentSession();
       tx = sess.beginTransaction();
       sess.save(author);
       tx.commit();
      }catch(HibernateException e){
       System.out.println(e.toString());
      }finally{
       if(tx!=null){
        tx.rollback();
       }
       HibernateUtil.closeSession();
      }
     }
   
   
     public Topic query(int id) throws HibernateException{
      Topic topic = null;
      try{
       sess = HibernateUtil.currentSession();   
       topic=(Topic)sess.load(Topic.class,new Integer(id));   
      }catch(HibernateException e){
       e.printStackTrace();
      }finally{
       HibernateUtil.closeSession();
      }
      return topic;
     }
     
     public static void main(String[] args) {
      
      Test app = new Test();
      try {
       /*测试插入作者
       Author author = new Author();
       author.setName("jack");
       app.insertAuthor(author);
       */
       /*测试插入主题
       Topic topic = new Topic();
       topic.setName("helloworld.");
       app.insertTopic(topic,1);
       */
       /*测试查询主题
       Topic topic = app.query(1);
       System.out.println(topic.getAuthor().getName());
       */
      } catch (Exception e) {
       // TODO 自动生成 catch 块
       e.printStackTrace();
      }
      
     }
    }

测试插入作者如图1所示,测试插入主题如图2所示,测试查询主题结果如下:
Hibernate: select topic0_.id as id1_, topic0_.name as name1_, topic0_.user_id as user_id1_, author1_.id as id0_, author1_.name as name0_ from topic topic0_ left outer join author author1_ on topic0_.user_id=author1_.id where topic0_.id=?
jack
生成的sql语句用到了join,查询结果为jack,与期望相符。

别再只盯着YOLOv8了!手把手带你用PaddleDetection的PP-YOLOE+搞定你的第一个检测项目 本文介绍了PP-YOLOE+在目标检测领域的优势与应用实践,对比YOLOv8展示其在精度、速度和部署便利性上的突破。通过详细的代码示例和实战教程,帮助开发者快速上手PaddleDetection工具链,实现产业级目标检测项目,提升开发效率。 阅读详情

相关推荐

TortoiseGit提示No supported authentication methods available错误

一、问题 在使用TortoiseGit与远程仓库进行同步代码的时候提示如下错误,即:没有支持认证的方法可用。而GitBash却可以正常使用,不受影响。 通过调查,发现应该是TortoiseGit远程仓库的公匙无法和本地的密匙进行匹配认证造成的(主要是TortoiseGit缺少本地密匙)。由于TortoiseGit的默认网络SSH client是TortoiseGitPlink.exe,如下图所示。因此主要有两种方式来解决该问题: 不修改TortoiseGit的默认网络SSH client,此时需要为To

Jeffxu_lib的博客 2万+

Hibernate中引用View的解决方案_来自一网友,在此表示谢谢

一、思路 问题: 以往用Hibernate处理View时发生的困难主要集中在这两方面: View是没有主键 由于View是由select语句生成,所以不存在任何主键。也就无法对其映射。 Hibernate必须对要操作的表进行po封装 Hibernate要求对数据库的操作都是通过pojo映射来实现的。也就是说无法对某个View直接读取而不对其进行映射。 解决: 要解决以上问题,我采取一下方案: 在建

黄瓜和土豆的专栏 2325

零基础教程:用Python给试卷照片自动切题(有道OCR+PIL完整流程)

本文为零基础用户提供了一套完整的Python自动化切题方案。通过调用有道OCR API识别试卷照片中的题目坐标,并利用PIL库进行精准裁剪,将杂乱的试卷图片自动分割为独立的题目图像。教程详细涵盖了环境搭建、图像预处理、API调用、坐标解析与批量处理全流程,帮助教育工作者和技术爱好者高效处理大量试卷,实现工作流程自动化。

grpc6streamer的博客 1174

[原创]hibernate 一对一实践

by hjack最近做的一个工程要用到hibernate的一对一关联,比如论坛的一个主题对应一个作者。hibernate的一对一关系有两种形式,一种是共享主键方式,另一种是惟一外键方式,因为这里用到的是在主题表里与作者表之间的对应关系,所以介绍的是惟一外键方式的一以一关联。由于网上很多教程都说得不清楚,给出的实例不能正确运行,所以写下这份笔记,以便以后查询,并与大家分享,如有不对的地方请指正。

爱JAVA 爱NALA 2621

COMSOL两相流(相场法)

COMSOL是一款功能非常强大的多物理场仿真软件,拥有可视化和后处理工具,可方便有效的展示您的仿真效果,具有灵活、高效、友好的特点,软件能够为用户提供各类工程问题的解决方案,从而帮助广大研究和工程人员能够在科研上取得新突破。 COMSOL可以实现声学、传热、流体力学、结构力学等方面的模拟仿真,具体模块如下图所示。 COMSOL软件设置流程 定义需要求解的问题类型:针对一个需要仿真的问题,需要先对问题进行分析;分析该问题用到哪些物理场,什么样的几何模型,以及如何设置研究等。该步骤可以使用COMSOL中的

weixin_47139559的博客 1万+

《AI应用架构师:解锁AI智能体于经济学研究洞察经济趋势的关键密码》

当经济学家还在为“疫情后的消费复苏曲线”“ChatGPT对就业的长期影响”等非线性问题挠头时,AI应用架构师已经用AI智能体搭建了一个“数字经济沙盘”:里面有会砍价的消费者、会算成本的企业、会调政策的政府,每个智能体像真实角色一样思考决策,甚至能模拟出“政策出台3个月后失业率的微妙变化”。这篇文章将带你从架构师视角拆解:如何用AI智能体破解经济学研究的3大痛点(数据爆炸、非线性复杂、动态演化)?如何设计能“活起来”的经济智能体?如何用智能体模拟出能指导现实的经济趋势?

AI天才研究院 902

hibernate代码生成工具 转换工具 自动生成工具

hibernate代码生成工具 转换工具 自动生成工具  1. Middlegen 是用来从DB中已存在的表,生成相应的mapping file. 可以下载一个老外的middlegen的例子。 http://sourceforge.net/project/showfiles.php?group_id=40712 调用Middlegen很简单,例子中的middlegen自动生

极品小肥羊的博客 1327

uniapp - [全端兼容] 实现精美Editor富文本编辑器功能,uniApp全平台兼容的富文本插件组件用户可上传图片及对接服务器存储文件等,手机移动端H5网页富文本/小程序富文本/App富文本!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniapp富文本编辑器,uniapp中如何实现各平台都兼容的富文本编辑器,Editor富文本插件,uniApp微信小程序富文本,UNI-APP安卓苹果ios系统App端富文本组件,editor富文本编辑器如何实现上传图片,图片上传后不显示怎么办,如何配置图像上传功能,富文本图片上传怎么传到服务器中,获取图片路径,editor插入图片,富文本编辑器上传图片,报错怎么办,跨域CORS处理,配置不行无效

🏆 前端领域优质创作者 1万+

hibernate 一对一 最佳实践

aa

code小王子 1660

AI奶牛TMR智能饲喂机器人 Qt信创完整项目( 统信/麒麟国产系统直接编译)

内置**犊牛、育成牛、围产牛、泌乳牛、干奶牛**5套标准化饲喂配方;+" 饲喂批次完成|牛群:"+grpText+"|投喂饲料:"+QString::number(ft)+"吨|剩料:"+QString::number(st)+"吨|异常牛:"+QString::number(abCow);cv::putText(frame,"霉变变质饲料禁止饲喂",cv::Point(20,40),cv::FONT_HERSHEY_SIMPLEX,0.7,cv::Scalar(0,0,255),2);

寒寒豆豆软件公司的博客 183

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 474

[转载]hibernate 一对一实践 by hjack

hibernate 一对一实践 by hjack 最近做的一个工程要用到hibernate的一对一关联,比如论坛的一个主题对应一个作者。hibernate的一对一关系有两种形式,一种是共享主键方式,另一种是惟一外键方式,因为这...

congji3817的博客 378

claude-hub:GitHub上的AI开发助手,让Claude自动帮你写代码、审代码、合代码

代码不再是人写的,而是人引导 AI 写的。在这个时代,GitHub 不再只是一个代码托管平台,而是 AI 开发代理的工作台。每一个 issue、每一条 PR,都可能是一次与 AI 合作的机会。未来属于那些敢于把开发流程交给 AI 来优化的人——他们不是在取代自己,而是在放大自己的影响力。📌关注本系列文章,我们将持续输出关于 AI 编程、GitHub 自动化、AI Agent 产品化的深度分析。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 1373

Hibernate 一对一实践

最近做的一个工程要用到hibernate的一对一关联,比如论坛的一个主题对应一个作者。   hibernate的一对一关系有两种形式,一种是共享主键方式,另一种是惟一外键方式,因为这里用到的是在主题表里与作者表之间的对应关系,所以介绍的是惟一外键方式的一以一关联。   由于网上很多教程都说得不清楚,给出的实例不能正确运行,所以写下这份笔记,以便以后查询,并与大家分享,如有不对的地方请指正。 ...

瞎掰吧 167

光伏板缺陷数据集、模型(含检测代码)

本数据集为光伏板缺陷检测专用数据,含标注图像与配套模型文件,总大小 43.2MB,适用于 AI 训练与算法验证。覆盖裂纹、脏污、热斑、遮挡、破损等常见缺陷,可直接对接 YOLO 等主流检测框架。面向光伏运维、工业质检与科研场景,支持无人机巡检图像分析、智能缺陷识别,助力提升电站运维效率、降低人工成本,推动光伏行业智能化升级。

使用贝叶斯优化的matlab代码案例

这是一份使用贝叶斯优化解决优化问题的matlab脚本示例,将您所需要解决的优化问题替换即可无缝热插拔使用这份代码。

[原创]hibernate 一对一实践 by hjack

最近做的一个工程要用到hibernate的一对一关联,比如论坛的一个主题对应一个作者。hibernate的一对一关系有两种形式,一种是共享主键方式,另一种是惟一外键方式,因为这里用到的是在主题表里与作者表之间的对应关系,所以介绍的是惟一外键方式的一以一关联。由于网上很多教程都说得不清楚,给出的实例不能正确运行,所以写下这份笔记,以便以后查询,并与大家分享,如有不对的地方请指正。本测试使用mysql

Intraweb的专栏 1208

VOC电视检测数据集 tvmonitor_VOCtrainval2007.zip

1、VOC电视检测数据集2、类别名: tvmonitor3、来源:从 VOCtrainval2007数据集 单类别提取得到4、标签类别:txt和 xml两种5、图片数量:279

Hibernate 一对一外键单向关联

Hibernate 一对一外键单向关联       事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似。只需要将原来的many-to-one元素增加unique="true"属性,用于表示N的一端也必须是唯一的,在N的一端增加了唯一的约束,即成为单向1-1。基于外键的单向1-1的配置将与无连接表N-1关联的many-to-one增加uni...

yenairong的博客 112

信息化项目软件开发费用测算规范标准.doc

信息化项目软件开发费用测算规范标准.doc

hibernate基于主键的双向一对一

hibernate环境配置 实体类 public class IdCard { private Integer id; private String address; private People people; public People getPeople() { return people; } public void setPeople(People people) ...

weixin_43317111的博客 183

Hibernate的一对一映射(八)

感谢Jie’ blog http://ilog.vip/ ,谢谢他让我有了继续写下去的信念。愿一起坚持,在路上… 上一章简单介绍了Hibernate的一级缓存和二级缓存(七),如果没有看过,请观看上一章 一. Hibernate的一对一映射的使用范围 在Hibernate开发中,一对一的映射虽然使用的少,不如一对多和多对多运用的多,但还是有使用的。 如,如果用户的个人资料太多,可以将用户的重要资料...

两个蝴蝶飞 1135

Hibernate一对一关系用注解解决

用注解代替.hbm.xml文件,注解写在实体类中 主表:Driver1.java package com.mingde.po; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistenc

MRZZXzzx的博客 372

Hibernate 一对一

        &lt;id name="id"&gt;                         &lt;generator class="sequence"&gt;                                     &lt;param name="sequence"&gt;seq_person&lt;/param&gt;              

chaoyv 146

04.Hibernate映射关系(一对一)

04.类与(.hbm.xml)的详解、一张表拆分成两个类、一对一 一、类与(.hbm.xml)的详解 1.类 import java.util.Date; /** * 学生信息 * @author Java53 */ public class StudentInfo { private Integer stuId; private String stuNo; private String stuName; private String stuSex; private Date stuBirt

ycjcson的博客 442

【SSH】Hibernate:O/R实体映射与一对一关联

实体映射 O/R映射是ORM框架中最为关键的组成部分了。其中的实体映射介绍hibernate中类和表之间的映射属性字段的基本技术   问题:数据库中有一个表【T_User】,其中字段有【ID】、【name】,那么如何在hibernate中建立一个对应的映射呢? Hibernate 选用xml 作为类表映射配置媒介(默认为.hbm.xml后缀),通过xml可以将表T_User 映射到hibe

一支穿云箭 1995

Hibernate的映射关系与级联(一对一、一对多、多对多)

Hibernate的映射关系与级联(一对一、一对多、多对多) 长期专业踩坑,现记录点滴,望提升自我,为祖国软件事业作贡献(害羞脸) 1、主键一对多示例 2、非主键一对多示例 3、主键多对多示例 4、非主键多对多示例 5、主键一对一示例 6、非主键一对一示例 7、双向示例 8、单向示例

iamzhuwh 1548

hibernate中一对一映射配置详细解析(二)

本例模仿的是用户与身份证信息,即一个用户对应一个身份证信息,且用户的身份证信息不能重复,采取基于主键的映射配置策略,下面是具体实现代码: 1.hibernate.cfg.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www

mischen520的博客 498

Java 数据 02:Hibernate 关联映射(一对一 / 一对多 / 多对多)

摘要: 本文深入讲解Hibernate中的三种关联映射方式:一对一、一对多/多对一和多对多关系。通过Java实体类代码示例、数据库表结构设计和Hibernate注解配置,详细演示了如何在ORM框架中实现对象间的复杂关系映射。文章包含CRUD操作实例、性能优化建议和常见陷阱,基于Hibernate 5.6+和JPA 2.2标准编写,适用于MySQL等多种数据库。从项目搭建到实际应用,帮助开发者掌握通过注解配置对象关系映射的核心技术,提升数据库操作效率。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

hibernate基于外键的双向一对一

配置hibernate环境、 实体类 public class People { private Integer id; private String name; private IdCard idCard; public Integer getId() { return id; } public void setId(Integer id) { this.id = id...

weixin_43317111的博客 179
上一篇: Hibernate包作用详解
下一篇: JAVA数据库基本操作,增删改查
cpp_lzth
博客等级 码龄19年 125粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值