hibernate one-to-one

一。

1. 完全的一对一关系,即A与B两种实体,分两个表格,一对一,A和B的关键字一样,其中一个是父,先产生,另一个是子,后产生,使用要求,就是A和B生成后,一般不再改变关系,也就是说A一般不再将C做为其子,而去除与B的关系,适用情况,比如表格某一部分太大,经常查询需要大量数据流,而将表分开以提高性能,完全一对一关系要求不能更改两者的关系,比如A对应B,一旦要将A的对应关系改成C一般是不允许的,因为C也要和A一样的ID,这样B和C的ID就冲突了,可以测试一下,看会不会冲突
2. <one-to-one
        name="propertyName"                                                       (1)
       class="ClassName"                                                            (2)
        cascade="all|none|save-update|delete"                         (3)
       constrained="true|false"                                                      (4)
        outer-join="true|false|auto"                                                (5)
        property-ref="propertyNameFromAssociatedClass"   (6)
        access="field|property|ClassName"                               (7)
       />
3. (1) name: 属性的名字

(2) class (可选 - 默认是通过反射得到的属性类型):被关联的类的名字。

(3) cascade(级联) (可选) 表明操作是否从父对象级联到被关联的对象。

(4) constrained(约束) (可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。这个选项影响save()和delete()在级联执行时的先后顺序(也在schema export tool中被使用)。(constrained=true 表明addresses表id同时作为customers的外键)

(5) outer-join(外连接) (可选 - 默认为 自动): 当设置hibernate.use_outer_join的时候,对这个关联允许外连接抓取。

(6) property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键[POJO中POJO类的实例]。

(7) access (可选 - 默认是 property): Hibernate用来访问属性的策略。
4. One-to-one中不需要inverse,另外完全的一对一关系很严格,两个对象一定同时存在,并且存在以后一般不会再修改,如果修改也不能从主动的一端进行修改了
5. 环境:模拟共享文件系统,Appender,每个附件有个名字和一个文件组成,在此将文件放到另一个表格中(AppenderFile)
6. 配置文件
-----------------------------------------------------------主动者
   <hibernate-mapping package="com.softWork.school">
 <class name="Appender" table="appender">
    <id name="appenderId" column="appender_id" type="long">
      <generator class="native"/>
    </id>
    <property name="appenderTitle" column="appender_title" type="string" length="200"/>
   
    <one-to-one name="appenderFile" class="com.softWork.school.AppenderFile" constrained="false" cascade="all">
    </one-to-one>
 </class>
</hibernate-mapping>
 
-------------------------------------------------------------------------------------------被动着
<hibernate-mapping package="com.softWork.school">
 <class name="AppenderFile" table="appender_file">
    <id name="id" column="id" type="long">
      <generator class="foreign">
        <param name="property">appender</param>
      </generator>
    </id>
    <property name="fileContent" column="file_content" type="string" length="2000"/>
   
    <one-to-one name="appender" class="com.softWork.school.Appender" constrained="true">
    </one-to-one>
 </class>
</hibernate-mapping>
 
 
7. 几个注意
1) 个主动者的constrainted为false,被动着为true,这个关键字主要决定关键字的生成是通过别人来获得还是自己生成
2) 被动者也一定要有主动者的引用以在主动者创建成功后获得其获得的ID。程序执行时,被动者也一定要设置好主动者对象的引用,虽然也可以先不设置,这样在保存主动者的时候,被动者将不会被保存,虽然这样可以达到先创建主动者 ,而后按需要创建被动者,但是这与实际语义不符
3) 不可以通过为主动者设置新的被动者来删除原被动者的值,而增加新的被动者
4) 可以通过主动对象直接修改被动对象的内容后,保存主动对象而直接修改被动对象对应数据库的内容
5) 可以级连删除
6) 一定要先创建主动者再创建被动者
8. 操作程序示范
前提条件是’级连’
            /*
     1)可以级连保存数据
       Appender appender = new Appender();
       appender.setAppenderTitle("hello world.");
       AppenderFile appenderFile = new AppenderFile();
       appenderFile.setFileContent("good action.");
       appender.setAppenderFile(appenderFile);
       appenderFile.setAppender(appender);
      //以下一句将保存所有数据
       session.saveOrUpdate(appender);
       */
       2)可以通过父对象获取子对象后修改子对象内容,保存父对象,级连更新到子对象
       //读取appenderFile对象内容
       Appender appender = (Appender)session.load(Appender.class,new Long(4));
       /*
       appender.getAppenderFile().setFileContent("a sucess man.");
      //可以通过父对象修改子对象内容
       session.saveOrUpdate(appender);
       */
3)只删除子对象
          a.通过设appender.setAppenderFile(null);
                    session.saveOrUpdate(appender); 无效
          b. Appender appender = (Appender)session.load(Appender.class,new Long(1));
             AppenderFile appenderFile = appender.getAppenderFile();
        session.delete(appenderFile);删除失败
          c. Appender appender = (Appender)session.load(Appender.class,new Long(1));
             AppenderFile appenderFile = appender.getAppenderFile();
             appender.setAppenderFile(null);
             session.delete(appenderFile);
            session.saveOrUpdate(appender);成功
4)通过为父对象设置新的子对象来修改子对象数据库中内容,操作失败,所以一般的,一对一的操作,因为完全可以通过父对象来设置子对象内容,完全不需要通过更换子对象来更换子表内容
//以下操作失败
Appender appender = (Appender)session.load(Appender.class,new Long(1));
        AppenderFile appenderFile = appender.getAppenderFile();
        appender.setAppenderFile(null);
        AppenderFile newFile = new AppenderFile();
        newFile.setFileContent("good man");
       
        appender.setAppenderFile(newFile);
        newFile.setAppender(appender);
        session.delete(appenderFile);
        session.saveOrUpdate(appender);
 
      4)级连删除成功
       session.delete(appender); 

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/notruiyi/archive/2007/08/13/1740124.aspx

 

 

二。

 

customer.hbm.xml中有

<many-to-one name="homeAddress" class="mypack.Address" column="HOME_ADDRESS_ID"

       cascade="all" unique="true"/>



<many-to-one name="comAddress" class="mypack.Address" column="COM_ADDRESS_ID"

       cascade="all" unique="true"/>

 

address.hbm.xml 中有

 

<one-to-one name="customer" class="mypack.Customer" property-ref="homeAddress"/>

 

 

property-ref属性表明建立从 homeAddress对象到Customer对象的关联。因此只要调用 homeAddress 持久化对象的 getCustomer()方法,就能导航到 Customer对象

 

 

 

GD32单片机引脚复用指南:如何让JTAG接口的PA15/PB3发挥第二功能? 本文详细介绍了GD32F103Cx系列单片机如何通过AFIO模块进行引脚复用,特别是将默认用于JTAG调试接口的PA15、PB3等引脚释放为普通IO或复用功能引脚。文章从原理出发,结合代码实践,讲解了如何配置调试端口重映射,将JTAG引脚安全地转换为GPIO或定时器通道,并提供了常见问题排查与最佳实践,帮助开发者高效利用有限的引脚资源。 阅读详情

相关推荐

Python实战:5分钟搞定N-CMAPSS航空发动机数据集解析(附完整代码)

本文提供了一份针对N-CMAPSS航空发动机数据集的快速解析实战指南。通过Python的h5py库,详细演示了如何读取HDF5文件结构、理解数据分类(如传感器、健康参数、场景描述符)并加载为Pandas DataFrame。文章还澄清了数据集中常见的变量数量疑惑,并给出了从数据加载到构建剩余使用寿命预测模型预处理流水线的完整代码,帮助工程师和研究人员高效入门航空发动机预测性维护分析。

weixin_29057065的博客 421

Hibernate之one-to-one主键关联映射

one-to-one映射的例子为一个人拥有一个身份证,一个身份证属于一个人。 先创建po类 Person.java package po; public class Person { private int id; private String name; //姓名 public int getId() { return id; } public voi...

一直在路上 119

LabVIEW+数据库应用系列保姆级教程,第二篇增删查改

2021-7-2 先挖好坑

wwplh5520370的博客 7362

hibernate one-to-one 表关联解决方案

在hibernate一对一实体映射中,常用有2种方式,一种就是把一对一看作多对一的一个特例,即通过外健参考。另一种是通过主健参考,限制2个数据表中的主健使用相同的值。看如下一个例子:一个顾客住一个房间。如果使用不同的方式,其数据表的设计是不同的(这里hibernate的具体用法就不细述了)。如果是通过外健连接,就是一对多的特例,其表结构如图:hibername的配置文件如下:Use

xsoftware的专栏 828

保姆级教程:用OpenCV搞定鱼眼双目相机的标定与测距(附完整C++代码)

本文详细介绍了使用OpenCV进行鱼眼双目相机标定与测距的全流程,包括环境搭建、数据采集、单目标定、双目标定、立体校正和视差计算等核心步骤。通过完整的C++代码示例和参数调优指南,帮助开发者快速实现高精度的双目测距系统,适用于机器人导航、VR全景拍摄等领域。

weixin_42573113的博客 387

大数据领域数据建模的多源数据融合技术

在大数据时代,数据来源呈现出多样化的特点,包括企业内部的不同业务系统数据、外部的社交媒体数据、传感器数据等。这些多源数据蕴含着丰富的信息,但由于数据格式、语义、质量等方面的差异,难以直接进行分析和利用。多源数据融合技术的目的就是将这些来自不同数据源的数据进行整合、清洗、关联和统一,构建一个具有一致性和完整性的数据模型,以便更好地挖掘数据背后的价值,为企业决策、科学研究等提供有力支持。

Java大师兄的博客 1304

Hibernate中实现one-to-many

近两天来在研究Hibernate中的one-to-one和one-to-many的问题,做了很多试验,发现实现表关系时,在hibernate-mapping中generator的class设为uuid.hex,上述的两种关系可以实现,也就是数据库的主键设为varchar(MSSQL2000),但是主键改成int型的标识却弹出“ERROR SessionImpl:2379 - Could not s

cooperking的专栏 2230

Windows系统下com0com虚拟串口安装与驱动签名禁用全攻略

本文详细介绍了在Windows系统下安装com0com虚拟串口工具的全过程,包括驱动签名问题的解决方法。通过禁用驱动程序强制签名,用户可以顺利安装并使用这款开源工具创建虚拟串口对,适用于软件开发测试、硬件调试等场景。文章还提供了验证虚拟串口功能的实用技巧和常见问题解决方案。

weixin_28720573的博客 385

Hibernate的注解many-to-one

Hibernate的注解many-to-one   Hibernate 学习应用 項目中一個實例:    最近使用annotation做hibernate映射,有两张表乘客(Passanger)表 和订单(VacationOrder )表,乘客表和订单表是ManyToOne,业务只需要从订单表出发设置不同乘客,根据乘客查看预订的订单,采用双向关联,ManyToOne

jerry191的博客 3902

【部署】Kimi 接入OpenClaw完整步骤及关键注意事项

本文详细介绍了如何将Kimi AI接入OpenClaw系统的完整步骤。首先需确保环境满足OpenClaw版本要求和系统支持,然后通过配置向导完成本地网关设置和Kimi模型接入,包括API密钥配置。文章提供了详细的命令操作和界面截图指导,并重点说明了安全警告处理、服务状态检查、API密钥有效性验证等关键注意事项。最后还展示了Kimi流量消耗明细和问题排查方法,帮助用户顺利完成接入并解决常见问题。整个流程清晰明了,涵盖了从环境准备到最终验证的全部环节。

海兰 7166

Vue3 - Element Plus 组件库 Tabs 标签页右侧区域插入按钮,<el-tabs> / <el-tab-pane> 选项卡组件右侧自定义插槽内容教程(右边区域添加自定义按钮功能区)

vue3,elementplus,tabs选项卡如何在插槽按钮,tabs标签页组件怎么自定义右侧内容,vue3elementplustabs组件右侧插槽按钮,element-plus在el-tabs组件的最右侧添加按钮,如何在选项卡右边加入按钮搜索框等内容,哪个属性能在tab选项卡右侧插入自定义按钮,在el-tabs组件最右侧添加按钮,vue3el-tabs组件怎么自定义右侧插槽内容,Tabs标签页右侧自定义插槽,ElementPlusTab右边加按钮,el-tabs组件自定义右侧按钮,在E

🏆 前端领域优质创作者 7014

hibernate one-to-one mapping 的 mapping file 怎么写

在用hibernate写one-to-one relationship时, mapping file里

寂月的技术博客 Love Java, Love Technology, Love IT 895

使用ChatGPT工具阅读文献的实战教程

本文介绍核心内容为使用ChatGPT工具阅读文献,希望对学习和使用ChatGPT的同学们有所帮助。为了兼顾质量和速度,本专栏的更新频率为一周一到两更。 文章目录 1. 前言 2. 实战教程 2.1 下载工具并登录 2.2 提取文献中的关键信息

herosunly的博客 15万+

Hibernate:简述many-to-one的特例(one-to-one唯一外键关联)

对one-to-one唯一外键关联进行分析。由于这种many-to-one的特例与many-to-one和one-to-one都有许多类似的地方,论述的内容可能不会十分详细,大多以参考这两种关系为主

SirouW的博客 555

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Hibernate中one-to-one的深入学习

题记:Hibernate是个好东西,可我感觉这个好东东不好驾御,一个one-to-one就让我花费了很多时间,现在终于有点理解,所以想给大家分享分享我的观点,如有差错,还请各位批评指正!1.关于one-to-one    持久化对象之间一对一的关联关系是通过one-to-one元素定义:<one-to-one name="propertyName"

yq76034150的专栏 3065

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Hibernate中的one-to-many

用一个例子来说明Hibernate中的one-to-many的配置,包含一个Parent(one)和一个Child(many).代码如下:由于使用的是Struts+Hibernate进行试验,所以Parent继承了ActionForm类。Parent.hbm.xmlxml version="1.0"?>DOCTYPE hibernate-mapping SYSTEM "http://hiberna

123xxx的专栏 1495

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Hibernate通过one-to-one元素的一对一映射

one-to-one这里,我们将通过one-to-one元素进行一对一的映射。在这种情况下,不会在主表中创建外键。在这个例子中,一个员工只能有一个地址,一个地址只能属于一个员工。在这里使用双向关联。我们来看看持久化类。

unber的博客 799

hibernate集合映射,one-to-many,删除集合成员

1、one方映射文件  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">     Mapping file autogenerated by MyEclipse Persistence Tools -->

joyyq的专栏 2656

关于hibernate中双向外键关联one-to-one的property-ref=的问题

大家都知道hibernate中的one-to-one映射主要有两种策略,(1)一对一主键关联(单向和双向)。(2)一对一外键映射(单项和双向)。本文主要讲解一下,一对一外键映射中的双向问题,在此前先通过一个实例了解。 person和idCard,是一种一对一的关系,其中   t_person表                               id

要少敏 信息技术提高班 6406

hibernate annotation one to one 共享主键

hibernate annotation对jpa主键one-to-one映射关系支持的有问题 我们都知道在hibernate中有个foreign的生成主键的方式,这个功能主要是用在主键关联的one-to-one关系,并且我在用hbm文件中配过这种方式,在ejb3/jpa规范中也提供了一个相似功能的annotation的:PrimaryKeyJoinColumn。但是,我在用hib

猿人的专栏 899

hibernate many to one 非主键关联

hibernate many to one 非主键关联hibernate在默认情况下,从表跟主表的关联,是通过主键来关联的,但是如果双方关联的字段都不是主键的情况下,可以在<many-to-one 这方设置一下property-ref,这样就可不通过主键来关联,例如:ListCommon(是<many-to-one方)的listMemberSid字段,要跟Broker(是<one-to

bgc525725278521的专栏 1354

Hibernate的one-to-many

刚开始直接套用了many-to-one写注释,schemaexport出的SQL没有变化。思考了一下,one-to-many的逻辑关系比many-to-one复杂多了,查文档,ok,是@hibernate.collection.one-to-many,选Set,就Ok啦。看了一眼Jolt大奖的图书目录,感觉确实都是好书,这下子又忍不住了,该出手时就出手吧!买之!

没有的专栏 948

Hibernate中one-to-one学习札记

1.关于one-to-one       持久化对象之间一对一的关联关系是通过one-to-one元素定义:   &lt;one-to-one         name="propertyName"                                (1)         class="ClassName"                               ...

cetus in sea 221

hibernate学习2之many-to-one

public class Group { private int id; private String name; //setter,getter } public class User { private int id; private String name; private Group group;//多个用户对应一个组 //setter,g

gundumw100的专栏 292

Hibernate的one-to-one级联配置

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33770878的博客 168

Hibernate 5.3 Many-To-One 多对一 Demo例

这篇文章是我写的第二篇,写的不完美的地方 请各位前辈 指出! 谢谢!   此次发布一下 自己学习Many-TO-One 的过程,中途遇到几次错误,还好自己查资料等等,解决掉。    Hibernate 版本 : 5.3.7      Mysql 版本:8.0.13     jar包已上传,点击下载Hibernate+mysql jar包    创建好Java项目,导入上面的jar包,配置...

aaBB123456798的博客 394
上一篇: hibernate many-to-many
下一篇: log4j 配置 详解
Terry_5008
博客等级 码龄8年 24粉丝 278原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值