JPA @MappedSuperclass注解的使用说明

2023-10-27

原文地址:http://hi.baidu.com/danghj/item/507d7bdcee3ac052d63aaedf

基于代码复用和模型分离的思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中。

 

1.@MappedSuperclass注解只能标准在类上:@Target({java.lang.annotation.ElementType.TYPE})

 

2.标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,但是他的属性都将映射到其子类的数据库字段中。

 

3.标注为@MappedSuperclass的类不能再标注@Entity或@Table注解,也无需实现序列化接口。

但是如果一个标注为@MappedSuperclass的类继承了另外一个实体类或者另外一个同样标注了@MappedSuperclass的类的话,他将可以使用@AttributeOverride或@AttributeOverrides注解重定义其父类(无论是否是实体类)的属性映射到数据库表中的字段。

比如可以重定义字段名或长度等属性,使用@AttributeOverride中的子属性@Column进行具体的定义。

注意:对于其父类中标注@Lob注解的属性将不能重载,并且@AttributeOverride里的@Column设置都将不起作用。

JPA规范中对@Lob注解并没有说明不能同时标注@Column注解,但是在实际使用中Hibernate JPA不支持这中标注方式。

 

4.此外,这样的类还可以直接标注@EntityListeners实体监听器,他的作用范围仅在其所有继承类中,并且实体监听器同样可以保被其子类继承或重载。

 

5.标注为@MappedSuperclass的类其属性最好设置为protected或default类型的,以保证其同一个包下的子类可以直接调用它的属性。便于实体监听器或带参数构造函数的操作。

 

6.由于标注为@MappedSuperclass的类将不是一个完整的实体类,因此其不能标注@Table,并且无法使用@UniqueConstraint设置字段的Unique属性,这一点以及对属性类型重载(如重载标注为@Lob的属性)的支持JPA规范还有待改进。

 

7.可以同时标注@DiscriminatorValue注解,以设定实体子类的实体标识字段的值。该属性一般是在实体继承的时候使用的较多,但是在实体映射的时候可以不用设置。

 

8.比较实体继承与实体映射的区别

实体继承的三种策略分别是:SINGLE_TABLE(所有继承的实体都保存在同一张数据库表中),JOINED(每个实体子类都将保存在一个单独的表中),TABLE_PER_CLASS(有继承关系的所有实体类都将保存在单独的表中)。

实体映射最类似于JOINED实体继承方式,他也是将实体子类单独保存为一张表,但是两者最大的区别就在于:查询的时候JOINED使用的是多态查询,在查询父类时其所有实体子类的数据也将同时被查询出,因此查询时间和性能都将有影响。但是实体映射方式的数据库查询等同于没有实体继承关系的查询,也就是说,他仅在实体层体现出一种继承的关系却并没有在数据库中体现这样一种关系,他的操作都是独立的并且将不会影响到实体子类。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA @MappedSuperclass注解的使用说明 的相关文章

随机推荐

  • 基于相关滤波器的追踪(Correlation Filter-based Tracking)原理

    基于相关滤波器的追踪 Correlation Filter based Tracking 原理 基于相关滤波器的追踪算法 典型的算法有KCF DSST STC SAMF等 这些算法的大致框架都是差不多的 介绍 在视频的第一帧给定目标的初始位
  • C++中int和char[]之间的转换

    1 整数转化字符串 sprintf 在头文件 include
  • 自建私人图床方案:使用Cpolar+树洞外链轻松部署超轻量级图床,实现高效图片存储

    文章目录 1 前言 2 树洞外链网站搭建 2 1 树洞外链下载和安装 2 2 树洞外链网页测试 2 3 cpolar的安装和注册 3 本地网页发布 3 1 Cpolar临时数据隧道 3 2 Cpolar稳定隧道 云端设置 3 3 Cpola
  • 用python 修改websocketpp头文件格式的时候发现python写csv文件时候有多余的双引号

    def transformer row str level int previous row if level 1 row row replace lt elif level 2 row row replace lt elif level
  • linux中脚本监测nginx状态并重启

    首先要确定nginx的安装位置 如果自定义安装则需要自己去找到nginx运行程序所在的位置 下面的编写和执行都是nginx通过源代码编译安装 运行程序所在的位置为 usr local nginx sbin nginx 确定nginx的使用端
  • mmsegmentation 之修改输入通道

    open mmlab有许多非常实用的框架 其中目标检测的话mmdetection确实很实用 但语义分割的话当属mmsegmentation 这篇博客介绍mmsegmentation如何将输入图像通道数修改为单通道 1 默认你自己已经用mms
  • Stable Diffusion核心算法DDPM解析

    DDPM Denoising Diffusion Probabilistic Model 去噪扩散概率模型 本文参考 一个视频看懂扩散模型DDPM原理推导 AI绘画底层模型 哔哩哔哩 bilibili 1 大概原理 从右往左为正向加噪过程
  • 完美数的算法设计(C语言)

    完全数 Perfect number 又称完美数或完备数 是一些特殊的自然数 它所有的真因子 即除了自身以外的约数 的和 即因子函数 恰好等于它本身 如果一个数恰好等于它的因子之和 则称该数为 完全数 寻找完美的数 题目描述 所谓完美的数是
  • 机器学习——卷积神经网络基础

    卷积神经网络 Convolutional Neural Network CNN 卷积神经网络是人工神经网络的一种 是一种前馈神经网络 最早提出时的灵感来源于人类的神经元 通俗来讲 其主要的操作就是 接受输入层的输入信息 通过卷积层 激活层
  • Pinia刷新会丢失数据 应该怎么解决

    Pinia pinia官网 pinia plugin persistedstate pinia plugin persistedstate官网 Pinia 是一个 Vue js 状态管理库 它允许你创建一个全局的 store 和多个模块化的
  • 不同页面参数值传递localStorage

    不同页面参数值传递localStorage 介绍 localStorage 和 sessionStorage 属性允许在浏览器中存储 key value 对的数据 localStorage 用于长久保存整个网站的数据 保存的数据没有过期时间
  • C语言-qsort函数详解

    一 qsort函数是什么 qsort 函数 快速排序的函数 引用stdlib h头文件 参数说明 void qsort void base 要排序的目标数组 size t num 待排序的元素个数 size t width 一个元素的大小
  • Java最小栈

    Java中的栈是一种后进先出 Last In First Out LIFO 的数据结构 它具有如下几个基本操作 将一个元素压入栈中 称为 入栈 push 将栈顶元素弹出 称为 出栈 pop 查看栈顶元素 称为 查看栈顶元素 peek 判断栈
  • Jenkins详细教程

    最近接触了jenkins这个东西 所以花点时间了解了下 它可以在代码上传仓库 如github gitee gitlab 后 在jenkins 一个网站界面 中通过获取代码仓库中最新代码 进行自动化部署 而省去手动打包 上传服务器 部署这一系
  • 多线程实现TCP的服务器,客户端随时收发信息

    1 作业需求 完成TCP的服务器 客户端 上交 服务器 客户端需要做到随时收发 多进程多线程实现 2 实现过程 1 服务器代码 include
  • 手机影像ISP流程:AWB(1)

    目录 AWB简介 AWB算法 灰度世界算法 灰度世界法的代码 灰度世界法的优点 灰度世界法的缺点 镜面反射法 镜面反射法的代码 镜面反射法的优点 镜面反射法的缺点 总结 AWB简介 AWB是Automatic white balance的英
  • 微信小程序中wx:for语法及其使用

    微信小程序官方文档中wx for 是用来做列表渲染 在组件上使用wx for绑定一个数组 数组的下标变量名默认为index 数组当前项的变量名默认为item 在Wxml中可以使用for循环获取数组数据 记住for循环后面跟的是数组 当然数组
  • 语义分割的常用指标详解

    1 混淆矩阵 假设有6个类别 L为10个真实标签的取值 P为对应的预测的标签值 先计算对应的n 类别数 这里假设为6 xL P bin的值一定是分类数的平方 混淆矩阵先将真实标签和预测标签抻成一维向量 做一个对应关系 nxL P 再将这个对
  • Linux必杀(十六):打包命令tar

    题记 tar 的参数非常多 挑重点的讲几个 tar j z cv f 新建的文件名 filename lt 打包与压缩 tar j z tv f 新建的文件名 lt 查看文件名 tar j z xv f 新建的文件名 c目录 lt 解压缩
  • JPA @MappedSuperclass注解的使用说明

    原文地址 http hi baidu com danghj item 507d7bdcee3ac052d63aaedf 基于代码复用和模型分离的思想 在项目开发中使用JPA的 MappedSuperclass注解将实体类的多个属性分别封装到