主键能否@onetoone_双向@OneToOne主键关联

主键能否@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批注的mappingBy元素来引用其拥有的一面。 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

主键能否@onetoone

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

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

相关文章

Android样式开发--selector

Thanks to 转载自Keegan小钢 原文链接:http://keeganlee.me/post/android/20150905 上一篇详细讲了shape的用法,讲解了怎么用shape自定义矩形、圆形、线形和环形,以及有哪些需要注意的地方。不过,shape只能定义单一的形状&#xf…

Amazon Glacier的Scala客户端

Amazon Glacier是一项安全,耐用且成本极低的云存储服务,用于数据归档和长期备份。 Glacier提供了一种冷藏数据存档解决方案,这意味着已存储的数据不可立即检索。 您首先需要请求检索数据,访问时间可能从几分钟到几小时不等&#x…

Drawable Resources

https://developer.android.com/guide/topics/resources/drawable-resource.html#Transition

SwipeRefreshLayout官方推荐下拉刷新

SwipeRefreshLayoutpublic class SwipeRefreshLayout extends ViewGroup implements NestedScrollingParent, NestedScrollingChildjava.lang.Object↳android.view.View↳android.view.ViewGroup↳ android.support.v4.widget.SwipeRefreshLayout API doc:http://…

jboss加载组件_直接从JBoss AS 7组件使用JGroups

jboss加载组件JGroups是Bela Ban的用于可靠消息交换的软件,该软件高度可配置,可以使用TCP或UDP作为传输协议。 基本上,您在多个客户端上运行JGroup,它们构成一个集群,它们可以在集群内发送和接收消息。 JGroups由JBos…

开源PagerSlidingTabStrip的使用Tab与ViewPager的完美结合

链接地址&#xff1a;https://github.com/astuetz/PagerSlidingTabStrip 下载PagerSlidingTabStrip-master 将com.astuetz包&#xff0c;res下的下的资源复制进工程 布局文件&#xff1a;activity_main.xml <RelativeLayout xmlns:android"http://schemas.android.co…

如何处理异常

最近&#xff0c;我与一个朋友进行了讨论&#xff0c;他是一个相对初级但很聪明的软件开发人员。 她问我有关异常处理的问题。 这些问题指出了一种技巧和窍门&#xff0c;肯定有它们的清单。 但是我坚信我们编写软件的方式背后的背景和动机&#xff0c;因此我决定从这种角度写关…

android动画详解

转自&#xff1a;工匠若水 http://blog.csdn.net/yanbober 1 背景 不能只分析源码呀&#xff0c;分析的同时也要整理归纳基础知识&#xff0c;刚好有人微博私信让全面说说Android的动画&#xff0c;所以今天来一发Android应用的各种Animation大集合。英文厉害的请直接移步参考…

凹数科技笔试

一、Java 1、成员变量作用域public/protected/defaultprivate/区别&#xff1f; public&#xff1a;该成员变量或其方法对当前类、同一包、子类、其他包都可见&#xff0c;所有类和对象都可以直接访问。 protected&#xff1a;该成员变量或其方法对当前类、同一包、子类都可…

jsr250-api_JSON处理的Java API(JSR-353)–流API

jsr250-apiJava很快将具有一组标准的API&#xff0c;作为Java EE 7的一部分处理JSON。该标准定义为JSR 353 – JSON处理的Java API &#xff08;JSON-P&#xff09;&#xff0c;目前正在最终批准投票中。 JSON-P提供面向对象和基于流的方法&#xff0c;在本文中&#xff0c;我将…

上传至GitHub

在工作目录下&#xff1a; git init git status git add . git commit -m"IndoorLocation" git status git remote add origin githttps://github.com/HiSunny/HelloInLoc.git git pull https://github.com/HiSunny/HelloInLoc.git master git push https://…

弹簧和线程:事务

为了能够在我们的线程中使用事务&#xff0c;我们需要了解事务如何在spring中工作。 spring中的事务信息存储在ThreadLocal变量中。 因此&#xff0c;这些变量特定于单个线程上正在进行的事务。 当涉及由单个线程运行的动作时&#xff0c;事务将在分层调用的Spring组件之间传播…

eclipse误删文件

右键工程--->restore from local history

Activity的LaunchMode和taskAffinity

Thanks to:http://www.cnblogs.com/SteveMing/archive/2012/04/24/2459575.html 【原】Activity的LaunchMode和taskAffinity 做项目到现在都一直没有理解LaunchMode有什么用&#xff0c;或许根本就没真正花心思去看&#xff0c;所以今天把这部分整理下。 设置Activity的Launc…

RelativeLayout重要属性

RelativeLayout用到的一些重要的属性&#xff1a;第一类:属性值为true或falseAndroid:layout_centerHrizontal 水平居中android:layout_centerVertical 垂直居中android:layout_centerI…

gradle spring_使用Gradle的简单Spring MVC Web应用程序

gradle spring除了我们现在将使用Spring MVC而不是原始servlet之外&#xff0c;该文章将与我们之前的文章Simple Gradle Web Application相似。 使用Gradle运行基本的Spring MVC应用程序确实很容易。 您可以在Github上下载本教程的源代码。 先决条件 安装Gradle 我们的基本项…

绘制Nine-Patch图片

Android sdk----->tools----->draw9patch.bat 打开draw9patch.bat文件 File--》open 0-patch将要绘制的.png图片加载进来 ctrl 图片边缘点击鼠标左键 绘制出线条&#xff0c;表示图片需要被拉伸的部分 File--save 9-patch 文件名pp.9.png。

jms spring_JMS和Spring:有时很重要的小事情

jms springJmsTemplate和DefaultMessageListenerContainer是用于访问JMS兼容MOM的Spring帮助器。 他们的主要目标是在JMS API之上形成一层&#xff0c;并处理诸如事务管理/消息确认之类的基础结构&#xff0c;并隐藏JMS API的某些重复和笨拙的部分&#xff08;保留在那里&#…

重温1 Android系统架构及版本

1、Linux内核层(Linux Kernel) 为Android设备的各种硬件提供了底层驱动&#xff0c;Display Driver/Camera Driver/Bluetooth Driver/Flash Memory Driver/Binder(IPC)Driver/USB Driver/Keypad Driver/WiFi Driver/Audio Drivers/Power Management 2、Libraries/Android Run…

REST资源何时应获得其自己的地址?

在纯粹的REST方法中&#xff0c;所有端点&#xff08;起始端点除外&#xff09;都是不透明的&#xff0c;不需要发布其各种详细信息。 即使使用这种方法&#xff0c;本文中的要点也很重要&#xff0c;因为服务器逻辑将必须确定何时需要结束点。 介绍 在REST体系结构中&#xf…