hiberbate的一对一关联关系

Hiberbate增删改查(分页)的例子简单的 Hiberbate增删改查的例子简单的有分面。简单的, 立即下载

    接着昨天的,今天我们来看一下一对一关联关系。我个人觉得这个关系最简单,理解起来也比较容易,在现实生活中这样的例子很多:如人和身份证,学生和学生证等。下面我来写一个人和身份证的例子。这个例子我做了简化,属性也比较少。开发环境我就不多说了,下面就一步一步的来写一下这个例子。

1.写2个vo类

package org.lxh.vo;

public class Person {
	private int id;
	private String name;
    private Card card;
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Card getCard() {
		return card;
	}

	public void setCard(Card card) {
		this.card = card;
	}

}


 

package org.lxh.vo;

public class Card {
	private int id;
	private String birthday;
	private Person person;
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}

	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	
}


 

在这里一个人对应一个身份证也可以说一个身份证只属于某个人,这里使用单项关联和双向关联都可以,我个人建议使用单项关联。

 

2.写2个hibernate映射文件,代码如下。

 

<?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.test.annotations">

    <class name="org.lxh.vo.Person" table="person">

        <id name="id" column="id">
            <generator class="increment"/>
        </id>

        <property name="name" column="name"/>
        <!-- <one-to-one name="card"/> --> <!-- 2个都写就表示双向关联 -->
        <!-- <many-to-one name="card" unique="true"/> --> <!-- 多对一的特殊情况 -->
        
    </class> 

</hibernate-mapping>


 

<?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.test.annotations">

    <class name="org.lxh.vo.Card" table="card">

        <id name="id" column="id">
            <generator class="foreign">
              <param name="property">person</param> <!-- 这里的id是外键主键表就是person -->
            </generator>
        </id>

        <property name="birthday" column="birthday"/>
        <one-to-one name="person"/>
        
    </class> 

</hibernate-mapping>


 

3.最后来写一个Junit4测试一下所写的代码,至于查询的代码,我就不写出来了大家可以自己写,下面的代码段含有昨天的测试部分,大家看清楚啊。

package org.lxh.test;


import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.BeforeClass;
import org.lxh.vo.Article;
import org.lxh.vo.Author;
import org.lxh.vo.Card;
import org.lxh.vo.Person;

import util.HibernateUtil;

public class Test {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}
    @org.junit.Test public void save(){
    	Session ses=null;
    	
    	Transaction tr=null;
    	try{
    		ses=HibernateUtil.getSession();
    		tr=ses.beginTransaction();
    		Author author=new Author();
    		author.setName("chenwill4");
    		Article article=new Article();
    		article.setAuthor(author);  //建立2个对象的关联
    		article.setName("老鹰抓小鸡3");
    		ses.save(author);  //将author信息保存
    		ses.save(article);
    		tr.commit();      //将事务提交,否侧数据不会被保存
    	}catch(Exception e){
    		e.printStackTrace();
    	}finally{
    		if(ses!=null){
    			ses.close();  //关闭连接,否则会把数据库卡死
    		}
    	}
    	
    }
    @org.junit.Test public void queryByAuthor(){
    	Session ses=null;
    	
    	Transaction tr=null;
    	try{
    		ses=HibernateUtil.getSession();
    		tr=ses.beginTransaction();
    		Article art=(Article)ses.get(Article.class, 3);
    		
    		
    		System.out.println("作者的姓名是:"+art.getAuthor().getName());  //通过文章查询作者
    		
    		
    		tr.commit();      //将事务提交
    	}catch(Exception e){
    		e.printStackTrace();
    	}finally{
    		if(ses!=null){
    			ses.close();  //关闭连接,否则会把数据库卡死
    		}
    	}
    	
    }
    
    @org.junit.Test public void insert121(){
    	Session ses=null;
    	
    	Transaction tr=null;
    	try{
    		ses=HibernateUtil.getSession();
    		tr=ses.beginTransaction();
    		Card card=new Card();
    		Person p=new Person();
    		p.setCard(card);
    		p.setName("陈瑞银");
    		
    		
    		card.setBirthday("2009-02-12");
    		card.setPerson(p);
    		ses.save(card);
    		ses.save(p);
    		tr.commit();      //将事务提交
    	}catch(Exception e){
    		e.printStackTrace();
    	}finally{
    		if(ses!=null){
    			ses.close();  //关闭连接,否则会把数据库卡死
    		}
    	}
    	
    }
}


 

ok程序写好了,来看一下效果截图,如下图所示,

 

 

好了,到这里程序就结束了,源代码在我的资源里免积分下载,需要的可以自己弄,有问题可以和我交流。

Hibernate关联关系 讲诉了关联的创建和使用 整理成了一份txt的文档 整个创建到使用的步骤都写在里面了 立即下载

相关推荐

避坑指南:Spring3集成OpenAPI时泛型响应失效的3种解决方案

本文深入探讨了Spring3集成OpenAPI时泛型响应失效的问题,提供了三种实用解决方案:移除@Schema注解、使用@ArraySchema包装泛型以及自定义Schema处理器。针对不同项目规模,详细分析了各方案的适用场景、优缺点及性能影响,帮助开发者高效生成准确的接口文档,提升前后端协作效率。

weixin_30839881的博客 100

hiberbate session 详解

org.hibernate Interface Session All Superinterfaces: Serializable All Known Subinterfaces: EventSource, Session All Known Implementing Classes: SessionImpl ---------------------------...

vivian3an的专栏 195

智慧杯 考试必备

2019.4. 强密码 描述 我们称一个密码是强密码,当且仅当它满足以下所有条件: 由 8 − 16 个字符组成 至少包含一个大写字母 (A-Z) 至少包含一个小写字母 (a-z) 至少包含一个数字 (0-9) 至少包含一个特殊符号 (! @ #$ % & * _ +) 娇娇发现她现在的密码好像不是强密码,请你帮她计算一下最少添加几个 字符可以变成强密码? 输入 输入仅一行,一个字符串,表示娇娇当前的密码 输出 输出一个数表示答案 如果不需要添加任何字符就已.

Fairy1208的博客 2861

hibernate注解配置关联关系

1.在判断到底是谁维护关联关系时,可以通过查看外键,哪个实体类定义了外键,哪个类就负责维护关联关系。 JoinColumn(name="pid") 2. 在保存数据时,总是先保存的是没有维护关联关系的那一方的数据,后保存维护了关联关系的那一方的数据,如:              Person p = new Person();             p.setName("xiaoluo"); ...

陌上离歌 337

【论文笔记】Beyond Low-frequency Information in Graph Convolutional Networks

文章目录1. Abstract2. Introduction低频和高频信号作用FAGCN怎么设计3. An Experimental Investigation4. Model4.1 filter定义4.2 Aggregation4.3 Problems of signal combination4.4 Spatial vision of FAGCN4.5 系数αijG\alpha_{i j}^{G}αijG​4.6 模型整体框架FAGCN的表达能力实验 本文发表在AAAI-21上 论文地址:https:

Running Snail 5601

保姆级教程:用YOLOv5s搞定钢材表面缺陷检测,从数据集NEU-DET到模型部署全流程

本文提供了一份详细的YOLOv5s钢材表面缺陷检测教程,涵盖从NEU-DET数据集处理到模型部署的全流程。针对工业环境中的实际限制,如计算资源有限和标注样本少等问题,提供了优化方案和实用技巧,帮助开发者快速实现高效的钢材缺陷检测系统。

weixin_30568591的博客 464

Hibernate关联关系配置(一对多、一对一和多对多)

第一种关联关系:一对多(多对一) "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系。 一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多。 多对一:从订单的角度来说多个订单可以对应一个消费者,即为多对一。   一对多关系在hbm文件中的配置信息: 消费者(一方): xml version="1.0" encoding="utf-8"

lanzhghz100的博客 203

深入解析Gerber RS274X文件格式:从基础语法到实战应用

本文深入解析PCB制造的核心标准Gerber RS274X文件格式,详细介绍了其基础语法、坐标系统、功能码以及嵌入式光圈定义等关键特性。通过实战案例演示了如何解析和手写Gerber指令,并总结了常见错误与调试技巧,帮助PCB工程师掌握这一与制造工厂沟通的“通用语言”,确保设计准确无误地转化为实体电路板。

weixin_29252171的博客 94

Hiberbate1对多

*技术分析之Hibernate的关联关系映射之一对多映射(重点)**          1. JavaWEB中一对多的设计及其建表原则          2. 先导入SQL的建表语句         * 创建今天的数据库:create database hibernate_day03;         * 在资料中找到客户和联系人的SQL脚本          3. 编写客户和联系人的JavaBe...

dddidi_的博客 194

从轴承润滑到代码实现:手把手教你用Python FDM求解稳态雷诺方程

本文详细介绍了如何用Python FDM(有限差分法)求解稳态雷诺方程,从轴承润滑理论到代码实现的全过程。通过构建无量纲方程、有限差分格式和迭代求解算法,开发者可以快速实现专业级润滑分析,应用于涡轮发电机、汽车曲轴等场景。文章还提供了完整的Python代码示例和结果可视化方法,帮助工程师优化轴承设计。

weixin_28689507的博客 118

扩充两个三维体积:ITK实现

在医学图像处理中,经常需要进行 3D 体积的操作,比如合并、分割等。而 ITK (Insight Segmentation and Registration Toolkit) 是一个常用的开源库,可以用于实现各种医学图像处理算法。这篇文章将介绍如何使用 ITK 实现扩充两个三维体积的操作。不过以上代码已经足够简单明了地演示了如何使用 ITK 实现扩充两个三维体积的操作。首先,我们需要准备两个三维体积的数据。这里假设这两个体积大小相同,并且已经加载到内存中了。来读取和保存体积数据,使用了。

CodeVorter的博客 204

hibernate关联关系

一、一对多的关联配置 1、关联指的是类之间的引用关系。 如果类A与类B关联,那么被引用的类B将被定义为类A的属性。 2、一对多的关联: 例如:订单和订单项,一个订单有多个订单项; 但是一个订单项只有一个订单; 3、创建实体类和映射文件 ①、实体类: (1)Order package com.ysq.two.entity; import java.util.HashSet; import java.util.Set; public class Order { // ...

m0_60375302的博客 184

ESD防护设计宝典(十):RE(辐射发射)超标问题排查与解决

RE测试是EMC认证的“头号杀手”。当屏幕上出现一根根超标频谱线时,如何快速定位元凶并有效整改?本讲将带你化身电磁侦探,完成一次完美的RE问题“缉凶”。

m0_56451176的博客 394

Hiberbate新手笔记

第一个hibernate项目: 1、新建java项目 2、创建User Library,加入如下jar        * HIBERNATE_HOME/hibernate3.jar        * HIBERNATE_HOME/lib/*.jar        * MySql jdbc驱动 3、创建hibernate配置文件hibernate.cfg.xml,为了便于调试

magicsongs的专栏 532

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hiberbate入门

这里写目录标题一、什么是hibernate二、如何在项目中添加hibernate三、hibernate 核心api分析 一、什么是hibernate ORM框架/持久层框架 dao dao jdbc hibernate jdbc ORM(Object Relational Mapping):对象关系映射。 对象与关系型数据库之间的映射管理框架 优势:跨数据库的无缝移植(SqlServer、Oracle、MySql) 二、如何在项目中添加hibernate 1、添加hiber

weixin_45576466的博客 400

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

hiberbate

主键关联:从表的主键,同时又是主表的外键,从表没有单独的外键列 外键关联:从表中存在外键列,关联主表的主键列。但外键列是不重复的 cascade和inverse的区别: cascade表示级联操作,当主表记录做操作时,从表记录做相应的操作,维护的是记录 inverse表示控制反转。当该属性设置为真是,表示由关联对象维护外键关系,当前对象不做外键维护,维护的是外键 一般来说,inverse设置

wofangzhou的博客 1074

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Hiberbate

(页面-1)* 条数,条数 ---分页查询的公式(2-1)*2,2 <property name="show_sql">true</property>--在控制台,可查看生成的sql语句<property name="hbm2ddl.auto">update</property>--自动检测是否有表,否,则创建<property name="...

weixin_30650039的博客 153

hiberbate 缓存问题

纯属引用   随着Hibernate在Java开发中的广泛应用,我们在使用Hibernate进行对象持久化操作中也遇到了各种各样的问题。这些问题往往都是我们对Hibernate缺乏了解所致,这里我讲个我从前遇到的问题及一些想法,希望能给大家一点借鉴。       这是在一次事务提交时遇到的异常。       an assertion failure occured (this ma...

Tomcat2009的专栏 264

hiberbate HQL

hibernate查询语言(Hibernate Query language,HQL),它是Hibernate提供的一种面向对象的查询语言,和SQL查询语言很相似。在Hibervate提供的各种查询方式中,它是使用最广泛的一种,也是官方推荐使用的查询方式,它具有一下功能: (1)在查询语句中设定各种查询条件。 (2)支持动态绑定参数。 (3)支持投影查询(即仅检索出对象的部分属性)、分页查询

wangli325的专栏 1796

hibernate关联关系(一对多)

什么是关联(association) 关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。例如: class B{ private String name; private List<A> bs = new arraylist(); } public class A{ private B b = new B; ...

qq_45179408的博客 261

struts2与hibernate结合的一对一增删改查以及hiberbate当中一对一的增删改

hibernate框架中的游离态与持久态和自由态分别是什么 游离态是指session空间中没有这个对象(这个对象没有纳入session的管理范围内),数据库有与之对应的数据 //创建对象 Student stu=new Student(); //将对象从session当中踢出 session.evict(); s.setAge(10); 持久态是指:session空间中有这个对象(在sessio...

小小&大大 380

hiberbate mybatis ibatis对比

https://www.cnblogs.com/inspurhaitian/p/4647485.html https://blog.youkuaiyun.com/qq_21033663/article/details/50281161 ibatis与mybatis区别? ibatis是mybatis的前身,在2010年7\8月份ibatis所项目移到了google,就将ibatis3.x正式改名为mybati...

qq_38796613的博客 211

Hiberbate主键生成策略

下面让我们看一下几种常用的主键生成方式:1、 自动增长identity:适用于MySQL、DB2、MS SQL Server,采用数据库生成的主键,用于为long、short、int类型生成唯一标识使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用...

a727808的博客 155
上一篇: hibernate中的一对多关联关系
下一篇: hibernate多对多关联关系
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值