Hibernate一对一关联------主键关联(亲测成功)

 

1、创建两个实体(Company.java和Login.java)代码如下:

 1 package wck.stu.vo.onetoonein;
 2 
 3 public class Company {
 4     private String id = "";
 5     
 6     private String companyName = "";
 7     
 8     private String linkman = "";
 9     
10     private String telephone = "";
11     
12     private String email = "";
13     
14     private Login login;
15     
16     public String getId() {
17         return id;
18     }
19 
20     public void setId(String id) {
21         this.id = id;
22     }
23 
24     public String getCompanyName() {
25         return companyName;
26     }
27 
28     public void setCompanyName(String companyName) {
29         this.companyName = companyName;
30     }
31 
32     public String getLinkman() {
33         return linkman;
34     }
35 
36     public void setLinkman(String linkman) {
37         this.linkman = linkman;
38     }
39 
40     public String getTelephone() {
41         return telephone;
42     }
43 
44     public void setTelephone(String telephone) {
45         this.telephone = telephone;
46     }
47 
48     public String getEmail() {
49         return email;
50     }
51 
52     public void setEmail(String email) {
53         this.email = email;
54     }
55 
56     public Login getLogin() {
57         return login;
58     }
59 
60     public void setLogin(Login login) {
61         this.login = login;
62     }
63 }
Company.java
 1 package wck.stu.vo.onetoonein;
 2 
 3 public class Login {
 4     private String id = "";
 5     
 6     private String loginName = "";
 7     
 8     private String loginPwd = "";
 9     
10     private Company company;
11 
12     public String getId() {
13         return id;
14     }
15 
16     public void setId(String id) {
17         this.id = id;
18     }
19 
20     public String getLoginName() {
21         return loginName;
22     }
23 
24     public void setLoginName(String loginName) {
25         this.loginName = loginName;
26     }
27 
28     public String getLoginPwd() {
29         return loginPwd;
30     }
31 
32     public void setLoginPwd(String loginPwd) {
33         this.loginPwd = loginPwd;
34     }
35 
36     public Company getCompany() {
37         return company;
38     }
39 
40     public void setCompany(Company company) {
41         this.company = company;
42     }
43 }
Login.java

 

  2、创建配置文件(Company.hbm.xml和Login.hbm.xml)代码如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <class name="wck.stu.vo.onetoonein.Company" table="COMPANY">
 7         <id name="id" type="java.lang.String">
 8             <column name="C_ID" length="32" not-null="true"></column>
 9             <generator class="uuid.hex"></generator>
10         </id>
11         <property name="companyName" type="java.lang.String">
12             <column name="C_COMPANYNAME" length="17"></column>
13         </property>
14         <property name="linkman" type="java.lang.String">
15             <column name="C_LIKEMAN" length="17"></column>
16         </property>
17         <property name="telephone" type="java.lang.String">
18             <column name="C_TELEPHONE" length="17"></column>
19         </property>
20         <property name="email" type="java.lang.String">
21             <column name="C_EMAIL" length="170"></column>
22         </property>
23         <one-to-one name="login" class="wck.stu.vo.onetoonein.Login" cascade="all" fetch="join" outer-join="true" lazy="false"/>
24     </class>
25 </hibernate-mapping>
Company.hbm.xml

注:<class>元素的lazy属性设定为true,表示延迟加载,如果lazy的值设置为false,则表示立即加载,下面对立即加载和延迟加载这两种概念进行说明。

(1)立即加载:表示Hibernate在从数据库中取得数据组装好一个对象(比如会员1)后,会立即再从数据库取得数据组装此对象所关联的对象(例如,登录帐号1)。

(2)延迟加载:表示Hibernate在从数据库中取得数据组装好一个对象(比如会员1)后,不会立即再从数据库取得数据组装此对象所关联的对象(例如,登录帐号1),而是等到需要时,才会从数据库取得数据组装此关联对象。

<one-to-one>元素的cascade属性标码操作是否 从父对象级联到被关联的对象all:所有情况下均进行级联操作,即包括save-update和delete操作。

<one-to-one>元素的fetch属性的可选值是join和select,默认值是select。当fetch属性设定为join时,表示链接抓取(Join Fetching):Hibernate通过在select语句中使用Outerjoin(外连接)来获得对象的关联实例或者关联集合。当fecth属性设定为select时,表示查询抓取(Select Fetching):需要另外发送一条select语句抓取当前对象的关联实体或集合。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <class name="wck.stu.vo.onetoonein.Login" table="LOGIN">
 7         <id name="id" type="java.lang.String" column="C_ID">
 8             <generator class="foreign">
 9                 <param name="property">company</param>
10             </generator>
11         </id>
12         <property name="loginName" type="java.lang.String">
13             <column name="C_LOGINNAME" length="17"></column>
14         </property>
15         <property name="loginPwd" type="java.lang.String">
16             <column name="C_LOGINPWD" length="17"></column>
17         </property>
18         <one-to-one name="company" class="wck.stu.vo.onetoonein.Company" constrained="true"/>
19     </class>
20 </hibernate-mapping>
Login.hbm.xml

注:Login.hbm.xml的主键id使用的外键生成机制(foreign),引用表company的主键作为login表的主键值,company在该映射文件的<one-to-one>元素的属性constrained="true"表示Login引用了company的主键作为外键。

  3、测试代码

 1     public String saveInfo() {
 2         Company company = new Company();
 3         Login login = new Login();
 4         login.setLoginName("QQ");
 5         login.setLoginPwd("123");
 6         company.setCompanyName("清华大学出版社");
 7         company.setLinkman("白立军");
 8         company.setTelephone("010-60772015");
 9         company.setEmail("bailj@163.com");
10         //PO对象之间相互设置关联关系
11         login.setCompany(company);    
12         company.setLogin(login);        
13         return onettooneDaoImpl.saveInfo(company);
14     }

 实现多个表之间的主键一对一关系的时候只需要在主表(例如:Company.hbm.xml)中加入

 <one-to-one name="login1" class="wck.stu.vo.onetoonein.Login1" cascade="all" fetch="join" outer-join="true" lazy="false"/>

其它一样,在保存的时候一定记得需要相互赋值例如:

 1 public String saveInfo() {
 2         Company company = new Company();
 3         Login login = new Login();
 4         login.setLoginName("QQ");
 5         login.setLoginPwd("123");
 6         Login1 login1 = new Login1();
 7         login1.setLoginName("QQ");
 8         login1.setLoginPwd("123");
 9         company.setCompanyName("清华大学出版社");
10         company.setLinkman("白立军");
11         company.setTelephone("010-60772015");
12         company.setEmail("bailj@163.com");
13         //PO对象之间相互设置关联关,注意这如果是多个表都需要相互赋值
14         login.setCompany(company);
15         login1.setCompany(company);
16         company.setLogin(login);
17         company.setLogin1(login1);
18         return onettooneDaoImpl.saveInfo(company);
19     }

 

转载于:https://www.cnblogs.com/wck1988/p/3486934.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

INTEL和AMD两大巨头的前身

仙童半导体公司&#xff0c;曾经是世界上最大、最富创新精神和最令人振奋的半导体生产企业&#xff0c;为硅谷的成长奠定了坚实的基础。更重要的是&#xff0c;这家公司还为硅谷孕育了成千上万的技术人才和管理人才&#xff0c;它不愧是电子、电脑业界的“西点军校”&#xff0…

servlet加载资源两种方式-内外(初始化参数).properties文件

在servlet中加载资源很方便&#xff0c;通过servletContext&#xff0c;这个是web服务器加载完web项目返回的参数之一&#xff0c;还有servletConfig&#xff0c;得到web项目一些配置信息&#xff0c;request和response,等等&#xff0c;我们现在用的这个servletContext也叫做C…

java 登录编程_Java编程通过session访问需要登录的页面

使用Java访问一般网页&#xff0c;进行数据抓取等比较简单&#xff0c;直接用URL和URLConnection连接所需要的网站地址即可&#xff0c;然后对返回的html源码进行处理分析&#xff0c;获取感兴趣的内容。不过如果是需要登录后才能访问的网页就不能直接传入网站url进行连接了&am…

ZDB5202烧成控制器方法

1&#xff0e;跳线和ZDB5202的安装位置如下图 黄色开关设置为off状态&#xff0c;就是靠近班子里面的一方。 2&#xff0e;打开z-wave programmer软件&#xff0c;设置如下图&#xff0c;注意烧写接口为spi&#xff0c;烧写的时候会提示的。选yes是uart&#xff0c;选no是spi。…

controller配对与接触配对

1&#xff0e; 当点击添加按钮后 以上数据&#xff0c;都是z-wave主控制器与pc controller软件的交换。 2&#xff0e; 当连续点击从结点的配对按钮后。 3&#xff0e; 当点击remove按钮后 4&#xff0e; 当连续点击从结点接触配对按钮后

php可以调用windowsapi吗_2.如何调用WindowsApi

2.如何调用WindowsApi在上一篇章节中 很不专业的介绍了一下WindowsApi 如果你本身就知道 那你也压根不用看 如果你本身就不知道 就算我说的再多 估计你也觉得是多余 所以还是来点实际的首先 在C#中想要调用那些Api(当然不一定是Windows提供的Api) 你得添加一个引用&#xff1a;…

php获取跳转后url,php获取跳转后真实url的方法

php获取跳转后真实url的方法发布时间&#xff1a;2020-08-01 14:17:56来源&#xff1a;亿速云阅读&#xff1a;68作者&#xff1a;清晨这篇文章主要介绍php获取跳转后真实url的方法&#xff0c;文中介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们一…

定界符在php中,php定界符如何使用

定界符给字符串定界的方法使用定界符语法(“<<结束标识符必须从行的第一列开始。同样&#xff0c;标识符也必须遵循 PHP 中其它任何标签的命名规则&#xff1a;只能包含字母数字下划线&#xff0c;而且必须以下划线或非数字字符开始。举个例子&#xff1a;<?php $str…

php protobuf 二进制,PHP环境中使用ProtoBuf数据格式

1、syntax"proto3":表明使用的是proto3格式&#xff0c;如果不指定则为proto22、package test:定义包名为test&#xff0c;生成类时&#xff0c;会产生一个目录为test3、message Person:消息主体内容&#xff0c;里面为各个字段的定义二、生成对应的PHP类定义好Perso…

工具系列:PyCaret介绍_模型训练详细教程

工具系列:PyCaret介绍_模型训练详细教程 PyCaret初始化 setup任务&#xff1a;自动推断数据类型 必需参数默认转换实验记录模型验证GPU支持示例 PyCaret模型训练 compare_models 示例更改排序顺序只比较几个模型返回多个模型设置预算时间设置概率阈值禁用交叉验证在集群上进行…

php怎么调试小程序,教你如何配置微信小程序

这篇文章主要介绍了微信小程序 教程之小程序配置的相关资料,这里对app.json,pages,window等做了详细介绍&#xff0c;对于初学开发微信小程序的朋友&#xff0c;掌握这些还是比较重要的&#xff0c;需要的朋友可以参考下微信小程序——配置以下就是小编对小程序配置的资料进行的…

php中的控制器是什么意思,理解PHP中的MVC编程之控制器_php

简单来讲&#xff0c;控制器的作用就是接受请求。它使用获取的方法&#xff0c;在这里是通过URI&#xff0c;载入一个功能模块来刷新或者提交一个表述层。控制器将使用$_GET自动全局变量来判断载入哪一个模块。一个请求的例子&#xff0c;看起来像这样&#xff1a;http://examp…

GitHub---最简单的使用

大神就不要喷我了&#xff0c;写这个只是希望新人能够对自己写的项目更方便的本地管理。&#xff08;其实我也只会这点东西w&#xff09; 这两天稍微看了看GitHub&#xff0c;之前不是很明白这个版本控制器到底是什么意思&#xff0c;现在略微有了解&#xff0c;这是对项目代码…

php apache配置测试端口,详解安装配置Windows版apache服务器及压力测试

下载Apache1、下载地址&#xff1a;http://httpd.apache.org/download.cgi2、点击链接Files for Microsoft Windows&#xff1a;安装步骤1、先安装apache补丁1)下载地址&#xff1a;https://www.microsoft.com/zh-cn/download/confirmation.aspx?id481452)如果没有安装&#x…

ASCII,Unicode和UTF-8

1. ASCII码 我们知道&#xff0c;在计算机内部&#xff0c;所有的信息最终都表示为一个二进制的字符串。每一个二进制位&#xff08;bit&#xff09;有0和1两种状态&#xff0c;因此八个二进制位就可以组合出256种状态&#xff0c;这被称为一个字节&#xff08;byte&#xff09…

matlab中solve和resolve,resolve和solve的区别

solve和resolve的区别在于&#xff1a;首先solve一般用于解决难题。如solve a problem, solve a riddle, solve an algebra problem。而resolve 是用在解决矛盾&#xff0c;或者是解决大难题&#xff0c;较显示问题的严重性。如resolve a conflict。其他有关slove的词dissolve&…

shell变量详解

1 shell变量基础 shell变量是一种很“弱”的变量&#xff0c;默认情况下&#xff0c;一个变量保存一个串&#xff0c;shell不关心这个串是什么含义。所以若要进行数学运算&#xff0c;必须使用一些命令例如let、declare、expr、双括号等。shell变量可分为两类&#xff1a;局部变…

if和case用法比较

Case语句时并发语句&#xff0c;需要采用并行逻辑来实现&#xff0c;不存在逻辑的优先级别。If……else语句时多级嵌套语句&#xff0c;通常采用逻辑的串联来实现&#xff0c;该结构具有优先级别问题。这两种结构分别如下图所示&#xff1a; Always (a or b or c or d or s[1:…

PHP实训笔记,【学习笔记19】实验吧 让我进去

知识点MD5拓展攻击解题思路打开网站后看到&#xff0c;什么都没有&#xff0c;尝试抓包分析360截图17860604827894.PNGBurp 抓包发现&#xff0c;Cookie有东西。先是把source0改成source1,得到源码。、、、$flag "XXXXXXXXXXXXXXXXXXXXXXX";$secret "XXXXXXXX…

oracle查表占的物理空间,查询Oracle表实际物理使用大小

Oracle中有两种含义的表大小一种是分配给一个表的物理空间数量&#xff0c;而不管空间是否被使用。可以这样查询获得字节数&#xff1a;select segment_name, bytesfrom user_segmentswhere segment_type TABLE;效果如下&#xff1a;或者Select Segment_Name,Sum(bytes)/1024/…