Springboot整合JPA 多表关联:一对一 代码搭建

1.配置关联关系 

2.配置关联操作

  2.1单向

Student

package com.jmj.springDataApp.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Data
@Entity
@Table(name = "tb_student")
@AllArgsConstructor
@NoArgsConstructor
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "sid")
    private Long id;

    @Column(name = "sname",columnDefinition = "varchar(5)")
    private String name;

    @Column(name = "grade",columnDefinition = "int")
    private Integer grade;


    //单向关联一对一
    /**
     * cascade 设置关联操作
     *          ALL, 所有持久化操作
     *          PERSIST 只有插入才会执行关联操作
     *          MERGE, 只有修改才会执行关联操作
     *          REMOVE, 只有删除才会执行关联操作
     * fetch 设置是否懒加载
     *      EAGER 立即加载(默认)
     *      LAZY 懒加载( 直到用到对象才会进行查询,因为不是所有的关联对象 都需要用到) 必须要加事务注解 通过动态代理的方式代理的,
     *    当通过repository调用完查询方法,session就会关闭,一旦session关闭你就不能查询了
     *  orphanRemoval 关联移除(通常在修改的时候会用到)
     *          一旦把关联的数据设置null ,或者修改为其他的关联数据, 如果想删除关联数据, 就可以设置true  设置为null就把账户删除
     *   optional 限制关联的对象不能为null
     *          true 可以为null(默认 ) false 不能为null
     *  mappedBy 将外键约束执行另一方维护(通常在双向关联关系中,会放弃一方的外键约束)
     *          值= 另一方关联属性名
     */
    @OneToOne(cascade = {CascadeType.PERSIST,CascadeType.REMOVE},fetch = FetchType.LAZY,orphanRemoval = true)
    //设置外键的字段名
    @JoinColumn(name = "account_id")
    private Account account;

}

Account  

package com.jmj.springDataApp.pojo;

import lombok.Data;
import lombok.RequiredArgsConstructor;

import javax.persistence.*;

@Entity
@Table(name = "tb_account")
@Data
public class Account {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;



}

Test

package com.jmj.springDataApp.mapper;

import com.jmj.springDataApp.pojo.Account;
import com.jmj.springDataApp.pojo.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;

@SpringBootTest
public class OneToOneTest {

    @Autowired
     private StudentPageMapper mapper;


    //插入
    @Test
    void name() {
        Account account = new Account();
        account.setUsername("jmjaccount");
        account.setPassword("123456");
        Student student = new Student();
        student.setName("jmj");
        student.setGrade(1);
        student.setAccount(account);
        //初始化数据
        mapper.save(student);
    }

    @Test
   @Transactional(readOnly = true)
    void select() {
        Optional<Student> byId = mapper.findById(55l);

        Student student = byId.get();
        student.setName("hkl");
        System.out.println(byId);
    }

    @Test
    void delete() {
        mapper.deleteById(55L);
    }

    @Test
    void update() {
        Student student = new Student(56L, "jj", 3, null);
        Student save = mapper.save(student);

    }
}

2.2双向

package com.jmj.springDataApp.pojo;

import lombok.Data;
import lombok.RequiredArgsConstructor;

import javax.persistence.*;

@Entity
@Table(name = "tb_account")
@Data
public class Account {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;

    @OneToOne
    @JoinColumn(name = "student_id" )
    private Student student;


}
package com.jmj.springDataApp.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Data
@Entity
@Table(name = "tb_student")
@AllArgsConstructor
@NoArgsConstructor
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "sid")
    private Long id;

    @Column(name = "sname",columnDefinition = "varchar(5)")
    private String name;

    @Column(name = "grade",columnDefinition = "int")
    private Integer grade;


    //单向关联一对一
    /**
     * cascade 设置关联操作
     *          ALL, 所有持久化操作
     *          PERSIST 只有插入才会执行关联操作
     *          MERGE, 只有修改才会执行关联操作
     *          REMOVE, 只有删除才会执行关联操作
     * fetch 设置是否懒加载
     *      EAGER 立即加载(默认)
     *      LAZY 懒加载( 直到用到对象才会进行查询,因为不是所有的关联对象 都需要用到) 必须要加事务注解 通过动态代理的方式代理的,
     *    当通过repository调用完查询方法,session就会关闭,一旦session关闭你就不能查询了
     *  orphanRemoval 关联移除(通常在修改的时候会用到)
     *          一旦把关联的数据设置null ,或者修改为其他的关联数据, 如果想删除关联数据, 就可以设置true  设置为null就把账户删除
     *   optional 限制关联的对象不能为null
     *          true 可以为null(默认 ) false 不能为null
     *  mappedBy 将外键约束指向另一方维护(通常在双向关联关系中,会放弃一方的外键约束)
     *          值= 另一方关联属性名
     */
    @OneToOne(cascade = {CascadeType.PERSIST,CascadeType.REMOVE},fetch = FetchType.LAZY,orphanRemoval = true,optional = false,mappedBy = "student")
    //设置外键的字段名
    @JoinColumn(name = "account_id")
    private Account account;

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【什么是泛型,有什么好处】

✅什么是泛型&#xff0c;有什么好处 ✅典型回答✅泛型是如何实现的✅什么是类型擦除&#xff1f;&#x1f4dd;C语言对泛型的支持&#x1f4dd;泛型擦除的缺点有哪些&#xff1f; ✅对泛型通配符的理解&#x1f4dd;泛型中上下界限定符 extends 和 super 有什么区别&#xff1…

基于ssm二手车交易平台的设计论文

摘 要 进入21世纪网络和计算机得到了飞速发展&#xff0c;并和生活进行了紧密的结合。目前&#xff0c;网络的运行速度以达到了千兆&#xff0c;覆盖范围更是深入到生活中的角角落落。这就促使二手交易网站的发展。二手交易网站可以实现远程购物&#xff0c;远程选择喜欢的商品…

RocketMQ高级原理:深入剖析消息系统的核心机制

一、基础概念&#xff1a; 1. 消息模型 RocketMQ基于Producer、Broker、Consumer三部分构建。其中&#xff0c;Producer负责生成消息&#xff0c;Consumer处理消息&#xff0c;而Broker则承担消息存储的角色。Broker服务器可以存储多个Topic的消息&#xff0c;并支持消息在不同…

2000-2023年逐年最大NDVI数据集(500m)

2000-2023年逐年最大DNVI数据集&#xff08;500m&#xff09; 植被指数&#xff08;NDVI, Normalized Difference Vegetation Index&#xff09;可以准确反映地表植被覆盖状况。目前&#xff0c;NDVI时序数据已经在各尺度区域的植被动态变化监测、土地利用/覆被变化检测、宏观植…

Java 面试 多线程遇到的问题,如何处理

问题描述 某服务在运行过程中抛出了 RejectedExecutionException。 配置参数&#xff1a; corepoolsize 50, maxpoolsize 50&#xff0c; workqueue 为 SynchronousQueue 现象&#xff1a; 当新的task被拒绝时&#xff0c;pool size未达到配置值50. Caused by: java.util.conc…

MapReduuce配置YARN集群部署并启动(非常详细!!)

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f618;《CTF专栏》超级详细的解析&#xff0c;宝宝级教学让你从蹒跚学步到健步如飞&#x1f648; &#x1f60e;《大数据专栏》大数据从0到秃头&#x1f47d;&…

智能变电站协议系列-1、GOOSE、SV、MMS协议简介及GOOSE示例运行问题(IEC61850)

文章目录 一、前言二、资料准备三、智能变电站自动化系统架构四、GOOSE、MMS、SV协议以及其他协议1、GOOSE&#xff08;通用面向对象变电站事件&#xff09;协议2、MMS&#xff08;制造消息规范&#xff09;协议3、采样值 (SV) 协议4、数字化变电站中使用的其他协议遗留协议 五…

LangChain 29 调试Debugging 详细信息verbose

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

《工具箱-SVN》SVN安装、备份、迁移教程

文章目录 一、服务器搭建SVN1.检查SVN是否存在2.安装SVN3.创建版本库4.创建版本库存放文件地址5.修改配置文件5.1 vim authz5.2 vim passwd5.3 vim svnserve.conf 6.启动并查看SVN7.SVN Checkout8.SVN Update9.SVN Commit 二、SVN-无法连接主机&#xff0c;目标计算机积极拒绝&…

学鸿蒙开发的过程,差点要了我的命!

我真的好想感慨一下&#xff0c;这个世界真的给计算机应届生留活路了吗&#xff1f; 看着周围的同学&#xff0c;打算搞前端、JAVA、C、C的&#xff0c;一个两个去跑去应聘。你以为是00后整治职场&#xff1f; 真相是主打一个卑微&#xff1a;现阶段以学习为主&#xff08;工资…

centos安装Jenkins并拉取git远程仓库的代码进行自动化构建部署

安装Jenkins并拉取git远程仓库的代码进行自动化构建部署 1 前置条件2 先安装jdk113 安装git4 安装maven5 安装jenkins5.1下载jenkins5.2启动jenkins 6 使用jenkins拉取git仓库代码并部署6.1 安装插件6.2 在jenkins中配置maven6.3在jenkins上构建maven项目6.4 配置拉取的git仓库…

基于thinkphp+vue的大学生校园生活服务平台sb00r

大学生一体化服务平台可以提高大学生综合服务信息管理问题的解决效率&#xff0c;优化大学生综合服务信息处理流程&#xff0c;保证大学生综合服务信息数据的安全&#xff0c;它是一个非常可靠&#xff0c;非常安全的应用程序。 运行环境:phpstudy/wamp/xammp等 开发语言&#…

testtest

Python字符串格式化 c&#xff0c;c。 (笔记模板由python脚本于2023年12月19日 18:16:40创建&#xff0c;本篇笔记适合初通Python&#xff0c;熟悉六大基本数据(str字符串、int整型、float浮点型、list列表、tuple元组、set集合、dict字典)的coder翻阅) 【学习的细节是欢悦的历…

BW 抽取数据初始化

今天抽取几个销售订单的数据一直不对 &#xff0c;se14 清理了BW上的数据&#xff0c;发现重新抽数&#xff0c;抽取的数据跟ERP对不上&#xff0c;缺了好多&#xff0c;需要促使化&#xff0c;过程如下 。 感谢罗老师的支持 1.初始化 后勤类数据源&#xff0c;如果要重新…

鸿蒙介绍和基础环境搭建

1、鸿蒙介绍 鸿蒙系统&#xff1a;是华为公司2019年8月9日正式发布的操作系统&#xff0c;一款面向全场景的分布式操作系统&#xff0c;将人、设备、场景有机地联系在一起&#xff0c;将消费者在全场景生活中接触的多种智能设备进行资源共享&#xff0c;极速互联。 2020年9月1…

MT6785|MTK6785安卓核心板功能规格介绍_Helio G95核心板

MT6785安卓核心板是一款功能强大的工业级4G智能模块&#xff0c;它采用了Android 9.0操作系统。该核心板内置了蓝牙、FM、WLAN和GPS模块&#xff0c;具有高度集成的基带平台&#xff0c;结合了调制解调器和应用处理子系统&#xff0c;以支持LTE/LTE-A和C2K智能终端应用。 MTK67…

Http---HTTP响应报文

1. HTTP响应报文分析 HTTP 响应报文效果图: 响应报文说明: --- 响应行/状态行 --- HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述 --- 响应头 --- Server: Tengine # 服务器名称 Content-Type: text/html; charsetUTF-8 # 内容类型 Transfer-Encoding: chunked # 发送给客…

NAS下2023年最常用的Docker服务

服务推荐 密码服务&#xff08;bitwarden&#xff09; 我就属于从来记不住密码的那种人&#xff0c;这服务对我来说简直就是救星&#xff01; 之前我是国内应用统一一个密码&#xff0c;国外应用统一一个密码&#xff0c;密码中必须加特殊符号的一个密码&#xff0c;等等…这…

Android Studio 显示前进后退按钮

在写代码的过程中我们经常需要快速定位到先前或者往后的代码位置&#xff0c;可以使用Alt左右箭头 但是新安装的Android Studio工具栏上是没有显示左右箭头的工具按钮的&#xff0c;需要我们设置将Toolbar显示出来 View-Appearance-Toolbar 勾选即可 显示后