双向@OneToOne主键关联

现在该继续有关Hibernate的文章了。 最后一个致力于单向@OneToOne关联 。 因此,今天我将向您展示如何获取双向@OneTonOne主键关联 。 本教程中基于前一篇文章的示例。 让我们开始吧。

我将使用以前创建的相同表。 为了建立双向一对一关联,我需要更新两个POJO和保存过程的方式。 让我们考虑一个新版本的Author类:

import javax.persistence.*;@Entity
@Table(name='authors')
public class Author {@Id@GeneratedValueprivate Integer id;private String name;@OneToOne(mappedBy='author', cascade=CascadeType.ALL)private Biography biography;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Biography getBiography() {return biography;}public void setBiography(Biography biography) {this.biography = biography;}}

变化很小。 我刚刚从传记字段中删除了@PrimaryKeyJoinColumn。 在双向关联中,出现关联的两个方面- 拥有反向 。 对于一对一的双向关系,拥有方对应于包含相应外键的方。 在我们的情况下,拥有方是Author类。 让我们继续。

引用JPA 2规范:

双向关系的反面必须通过使用OneToOne,OneToMany或ManyToMany批注的maptedBy元素引用其所属的面。 mapledBy元素指定实体中作为关系所有者的属性或字段。

本示例的反面是Biography类。 与Author类相比,它需要进行更多必要的更改。

import javax.persistence.*;import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;@Entity
@Table(name='biographies')
public class Biography {@Id@Column(name='author_id')@GeneratedValue(generator='gen')@GenericGenerator(name='gen', strategy='foreign', parameters=@Parameter(name='property', value='author'))private Integer authorId;private String information;@OneToOne@PrimaryKeyJoinColumnprivate Author author;public Author getAuthor() {return author;}public void setAuthor(Author author) {this.author = author;}public Integer getAuthorId() {return authorId;}public void setAuthorId(Integer authorId) {this.authorId = authorId;}public String getInformation() {return information;}public void setInformation(String information) {this.information = information;}	
}

第一件重要的事情是authorId字段的修饰和其他注释。

...
@GeneratedValue(generator='gen')
@GenericGenerator(name='gen', strategy='foreign', 
parameters=@Parameter(name='property', value='author'))
...

在@GeneratedValue中,我指定生成器的名称(“ gen”),在@GenericGenerator中,我定义生成器的策略。 第二件重要的事情是在类中添加具有适当的getter和setter的author

...@OneToOne@PrimaryKeyJoinColumnprivate Author author;
...

通过这种方式,我们获得了双向关联。 现在,我们可以从“传记”中访问“作者”,反之亦然,因为两个对象之间都有相互引用。 现在必须更新对象保存过程:

...public static void main(String[] args) {SessionFactory sessionFactory = HibernateUtil.getSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();Author author = new Author();author.setName(' O. Henry');Biography biography = new Biography();biography.setInformation('William Sydney Porter  better known as O. Henry...');author.setBiography(biography);biography.setAuthor(author);session.save(author);session.getTransaction().commit();session.close();}
...

请注意,现在在添加反面之前,我不再坚持拥有面。 但是您可以看到我将传记设置为作者,并在以下字符串中将作者设置为传记 。 这是双向关联的主要目的。 代码执行的结果是:

Hibernate: insert into authors (name) values (?)
Hibernate: insert into biographies (information, author_id) values (?, ?)

参考: Fruzenshtein的注释博客中来自我们的JCG合作伙伴 Alex Fruzenshtein的双向@OneToOne主键关联 。

翻译自: https://www.javacodegeeks.com/2013/03/bidirectional-onetoone-primary-key-association.html

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

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

相关文章

计量经济学建模_一分钟看完计量经济学

建模是计量的灵魂,所以就从建模开始。一、建模步骤建模步骤:A,理论模型的设计: a,选择变量b,确定变量关系c,拟定参数范围B,样本数据的收集: a,数据的类型b,数据的质量C&a…

如何将视频设置为网页背景

有时候为一个网页添加一个动画效果的背景,会让网页增加一定的韵味,让网页看起来与众不同。 第一步:准备工作 工欲善其事必先利其器,我们首先需要准备一个视频 第二步:html中引入视频 这里我们需要用到了video/标签&…

python通过代理(ssh tunnel)连接MongoDB

1、python 怎么通过 ssh tunnel 连接 MongoDB 在Python中,您可以使用sshtunnel库创建一个SSH隧道,并结合使用pymongo库来连接MongoDB数据库。首先,确保已经安装了这两个库,如果没有,可以通过pip安装它们: …

nginx日志配置指令详解

nginx日志配置指令详解 日志对于统计排错来说非常有利的。本文总结了nginx日志相关的配置如access_log、log_format、open_log_file_cache、log_not_found、log_subrequest、rewrite_log、error_log。 nginx有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日…

轻量级Web应用程序:PrimeFaces(JSF)+ Guice + MyBatis(第1部分)

最近,我的朋友问我如何构建轻量级的Java Web应用程序。 许多Java Web开发人员会选择Spring和Hibernate来构建传统的Web应用程序。 但是,它可能不够轻巧。 我建议他尝试使用Guice和MyBatis构建应用程序框架。 尽管Spring比Guice功能更丰富,但我…

haml入门

1.什么是Haml Haml是HTML abstraction markup language&#xff0c;遵循的原则是标记应该是美的。Haml能够加速和简化模版&#xff0c;长处是简洁、可读、高效。 2.erbm模板和haml模板对照 .erb模板代码&#xff1a; <section class”container”><h1><% post.t…

制图折断线_【机械制图】机械设计中的尺寸标注,看懂复杂机械图纸!

专注于机械行业、专业、职业信息分享服务于制造业百万工程师推荐阅读【机械制图】画图这么久&#xff0c;线型都没搞懂&#xff1f;【机械制图】机械图纸知识解析&#xff0c;这个总结溜溜的【机械制图】机械图纸尺寸标注规则&#xff0c;通过动图复习一下&#xff01;知名机械…

CCS3的过渡、变换、动画以及响应式布局、弹性布局

CSS3 过渡 、变换、动画 在没有CSS3之前&#xff0c;如果页面上需要一些动画效果&#xff0c;要么你自己编写 JavaScript&#xff0c;要么使用 JavaScript 框架(如 jQuery)来提高效率。 但是CSS3出来之后&#xff0c;有能力做一些如平滑过渡(比如在鼠标悬停时)和在屏幕上移动元…

Wordcounter,使用Lambdas和Fork / Join计算Java中的单词数

这些天来&#xff0c;我发布了Wordcounter &#xff0c;这是一个Java库和命令行实用程序&#xff0c;用于对文本文件中的单词进行计数并对单词计数进行分析&#xff0c;从而大量使用了功能编程结构和并行计算方法。 这是我在“令人讨厌的快速问答”大赛第四个条目SAP &#xff…

BZOJ2659: [Beijing wc2012]算不出的算式

2659: [Beijing wc2012]算不出的算式 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1489 Solved: 891[Submit][Status][Discuss]Description 算不出的算式 背景&#xff1a; 曾经有一个老掉牙的游戏放在我面前&#xff0c;我没有珍惜。直到这个游戏停产才追悔莫及。人世间…

Android Studio报Error:Execution failed for task #39;:Companion:preDexDebug#39;.

错误例如以下&#xff1a; Error:Execution failed for task :Companion:preDexDebug. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process command C:\Program Files\Java\jdk1.8.0_40\bin\java.exe finished with n…

go 修改结构体方法_「GCTT 出品」Go 系列教程——26. 结构体取代类

Go语言中文网&#xff0c;致力于每日分享编码、开源等知识&#xff0c;欢迎关注我&#xff0c;会有意想不到的收获&#xff01;Go 支持面向对象吗&#xff1f;Go 并不是完全面向对象的编程语言。Go 官网的 FAQ 回答了 Go 是否是面向对象语言&#xff0c;摘录如下。可以说是&…

WindowsLinux常用命令笔记

目录linux windows Linux: 1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件。 find . -name "*.xml" 递归查找所有的xml文件 find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello w…

button 和input 的区别及在表单form中的用法

先说一下button 和input的定义&#xff1a; <button> 标签定义的是一个按钮 1、在 <button> 元素内部&#xff0c;您可以放置任何内容&#xff0c;比如文本或图像。这是该元素与使用 <input> 元素创建的按钮之间的不同之处&#xff1b; 2、 <button> …

走向REST:在Spring和JAX-RS(Apache CXF)中嵌入Jetty

对于服务器核心Java开发人员而言&#xff0c;向世界“展示”的唯一方法是使用API​​。 今天的帖子都是关于JAX-RS的 &#xff1a;使用Java编写和公开RESTful服务。 但是&#xff0c;我们不会使用涉及应用程序服务器&#xff0c;WAR打包以及诸如此类的传统的重量级方法来做到这…

分组后分页_SQL(约束、视图、分页、序列、索引、同义词、创建用户,为用户授权、执行计划的使用 数据的导入导出)...

学习主题&#xff1a;SQL学习目标&#xff1a;掌握约束掌握视图修改表名与删除表删除表中的列语句的语法结构是什么&#xff1f;答&#xff1a;delete 表名from table where ;删除表中的列语句的语法结构是什么&#xff1f;答&#xff1a;delete 表名from table where ;截断表的…

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...

第三百三十四节&#xff0c;web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻&#xff0c;爬取Ajax动态生成的信息 crapy爬取百度新闻&#xff0c;爬取Ajax动态生成的信息&#xff0c;抓取百度新闻首页的新闻rul地址 有多网站&#xff0c;当你浏览器访问时看到的信息&#xf…

BEM思想之彻底弄清BEM语法

BEM的意思就是块&#xff08;block&#xff09;、元素&#xff08;element&#xff09;、修饰符&#xff08;modifier&#xff09;,是由Yandex团队提出的一种前端命名方法论。这种巧妙的命名方法让你的CSS类对其他开发者来说更加透明而且更有意义。BEM命名约定更加严格&#xf…

Hibernate Search 4.2最终发布:支持空间查询

JBoss已宣布发布Hibernate Search 4.2 final。 您可以从Sourceforge下载它或使用Maven构件 。 在新版本中&#xff0c;包含了一些有趣的功能&#xff1a; Hibernate Search现在支持空间查询 。 使用Spatial扩展&#xff0c;您可以将全文查询与基于到空间点的距离的限制结合起…

推荐算法

5类系统推荐算法,非常好使,非常全 今日头条用了哪五种推荐算法 视频 今日头条核心技术“个性推荐算法”揭秘转载于:https://www.cnblogs.com/lhuser/p/8306092.html