JPA 自关联 设置单向多对一

Spring boot 3

JPA中,遇到一个需求,建一个数据字典表: Dictionary,存放两级数据,第一级为字典项目,第二级为项目内容,查询时要把parent_id对应父项的名称也一起查出来,返回前端。

表字段如下:

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;@Column(name = "parent_id", nullable = false, columnDefinition="bigint default 0 COMMENT '父ID'")
private Long parent_id;@Column(name="name",nullable = false, columnDefinition="varchar(255) default '' COMMENT '名称'")
private String name;

这个地方如果用php来写,直接在查询的时候 left join下自己,设置下on,再用select把查出来的父name as成 parent_name就行了。

返回数据如下:

用java就没这么简单了。比如JPA中,需要设置一个关联关系,

@ManyToOne
@JoinColumn(name = "parent_id", referencedColumnName = "id", insertable = false, updatable = false)
private Dictionary parent;

parent_id关联到自身的主键id,但是,启动项目的时候报错了,如下:

Cannot add or update a child row: a foreign key constraint fails (`overs`.`#sql-1_3246`, CONSTRAINT `FK2gu2f0u63oqtk84hlnpoj3h92` FOREIGN KEY (`parent_id`) REFERENCES `dictionary` (`id`))

搜索下,有很多种原因,其中一种大致意思是外键字段必须可为空,并且记录里该字段不能保存相同的值(除了NULL)。

其它原因对照了下都没问题,就这一条不对,于是,修改了字段类型,并且清空了表,里面确实有几条记录parent_id 存的都是0,重复了。

@Column(name = "parent_id", columnDefinition="bigint default NULL COMMENT '父ID'")
private Long parent_id;

项目再启动就正常了。

查询的返回结构如下:

说回PHP,Laravel也可以设置关联状态,如下:

这样就跟JPA一样了,查询返回结构如下:

LARAVEL是不是跟JAVA越来越像了?呵呵

-完-

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

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

相关文章

增加linux系统文件打开数量的配置

linux系统中,你可以增加打卡最大文件数的限制,你可以使用ulimit这个命令修改这个限制。 全局配置 首先,在linux系统中查看最大可以打开文件的数量 \ # cat /proc/sys/fs/file-max 818354 这个数值标识一个登录用户最大可以打开的文件数量&…

Project DESFT 白皮书中文版——应用于普惠金融的可信数字凭证解决方案

1. 概述 Project DESFT 是由 Solv 基金会与 zCloak Network 联合设计孵化,以跨境贸易和金融服务为场景的分布式可信数字凭证解决方案(Distributed Trusted Digital Credential Solution),项目获得新加坡金管局(Monetar…

C++学习之路(四)C++ 实现简单的待办事项列表命令行应用 - 示例代码拆分讲解

本期示例介绍: 本期示例《待办事项列表应用》展示了一个简单的任务管理系统,用户可以通过命令行界面执行添加任务、删除任务和显示任务列表等操作。 功能描述: 添加任务功能: 用户可以输入任务描述,将新的任务添加到任务列表中。…

声音响度、声压级计权(A B C)实现

声压 sound pressure 声压就是大气压受到声波扰动后产生的变化,即为大气压强的余压,它相当于在大气压强上的叠加一个声波扰动引起的压强变化。由于声压的测量比较容易实现,通过声压的测量也可以间接求得质点速度等其它物理量,所以…

Java中的jvm——面试题+答案(Java虚拟机的基本概念,包括内存区域、类加载机制、垃圾回收等)——第15期

什么是Java虚拟机(JVM)? 答案: Java虚拟机是Java程序运行的环境,负责将Java源代码编译成字节码,并在运行时执行这些字节码。 Java虚拟机的主要组成部分有哪些? 答案: 主要组成部分…

【开源】基于JAVA的天然气工程业务管理系统

项目编号: S 021 ,文末获取源码。 \color{red}{项目编号:S021,文末获取源码。} 项目编号:S021,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四…

java编程规范-异常处理\mysql(阿里手册)

( 一 ) 异常处理 1. 【强制】 Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避,而不应该 通过 catch 来处理,比如: IndexOutOfBoundsException , NullPointerException 等等。 说明: 无法通…

手把手教会你--渗透实战--Hack The Box-Starting Point-Meow--持续更新

有什么问题,请尽情问博主,QQ群796141573 前言 前言 请务必跟着博主复现一遍 参考: Hack The Box-Starting Point-Meow

pygame加载图像,并让小球做平抛运动

文章目录 load转换和存储自由落体 在游戏设计中,图像显示是必不可少的功能,pygame中的image模块便用于加载图像。 load 通过load函数,可以加载多种图像格式,如下表所示 旧版本bmp, gpeg, png, pcx, tiff, xpmc, lbm(以及pbm, p…

windows下docker环境搭建与运行实战

背景 学习docker使用,需要环境,今天主要的目标是在windows环境下安装docker环境。 为什么要这么搞,主要是企业内部服务器,都是跟公网隔离的,没有访问公网权限,所以镜像什么的,从公网拉取完全没…

Ubuntu命令记录

一、基本 查询历史命令记录 history插件支持的分辨率 xrandr设置分辨率以及刷新率 xrandr -s 1920x1080赋予可执行权限 chmod x a.sh关机 sudo shutdown -h 18:00 18点关机 sudo shutdown -r now 立即重启 sudo shutdown -h now 立即关机重启 reboot查看磁…

卷积神经网络(Inception-ResNet-v2)交通标志识别

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据 二、构建一个tf.data.Dataset1.加载数据2. 配置数据集 三、构建Inception-ResNet-v2网络1.自己搭建2.官方模型 五、设置动态学习率六、训练模型七、模型评…

rust tokio select!宏详解

rust tokio select!宏详解 简介 本文介绍Tokio中select!的用法,重点是使用过程中可能遇到的问题,比如阻塞问题、优先级问题、cancel safe问题。在Tokio 中,select! 是一个宏,用于同时等待多个异步任务,并在其中任意一…

探索 Vue 中的 bus.$emit:实现组件通信的强大工具

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

linux logrotate介绍

我们知道linux系统日志文件位于/var/log目录下,在/var/log目录下,我们会发现有相当一部分日志文件末尾包含一串数字(E.g:ecure-20231114),这表明这部分日志文件经过了日志转储,以避免日志文件过大,导致可读性较差。 [root@rhel77 log]# pwd /var/log [root@rhel77 log]# …

运维高级--centos7源码安装Apache

安装必要的依赖项: sudo yum groupinstall "Development Tools" sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel这将安装编译和构建所需的基本工具,以及 Apache HTTP Server 所需的一些依赖项。 下载 Apache HTT…

Pycharm Available Packages显示Noting to show

使用Pycharm安装依赖包时Available packages 页面点击添加按钮后,没有任何包显示,并且无法搜索安装. 在各种网站查看到的方法如下: 1.网络问题,需要添加镜像源 点击Manage Repositories 添加一个可用的镜像源地址即可 2.打开了anaconda(那个绿色圈圈小图标),再点一下把它点…

如何在 Vim 中剪切、复制和粘贴

目录 前言 如何在 Vim 编辑器中复制文本 如何在 Vim 编辑器中剪切文本 如何在 Vim 编辑器中粘贴文本 如何通过选择文本来剪切和复制文本 通过选择文本复制 在 Vim 中选择文本来剪切文本 前言 在本篇 Vim 快速技巧中,你将学习到剪切和复制粘贴的相关知识。 剪…

【好玩的 Docker 项目】搭建一个简洁的记事本 ——minimalist-web-notepad

前言 搭建一个类似于 notepad 的纯文本笔记本,可以用来做记事本,也可以用来做临时记录的工具。 演示地址:https:/https://chinausdt.com 环境准备 腾讯香港轻量云应用服务器 1 核 1G(24 元 / 月款)域名一枚并做好解析Docker宝塔面板安装 Docker 更新、安装必备软件 BA…

PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables

PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables pg_stat_all_tables视图中记录有analyze信息,比如何时做的analyze、表元组个数(活元组、死元组)等。重启后发现该视图中表的统计信息重置不见了,发生了什么? 1、p…