首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JPA如何处理部分,非不相交的继承(在每表类方案中使用InheritanceType.JOINED)以及EntityManager.find()?

JPA(Java Persistence API)是Java平台上的一种ORM(对象关系映射)规范,用于将Java对象持久化到数据库中。在处理部分、非不相交的继承时,可以使用JPA的InheritanceType.JOINED策略,并结合EntityManager.find()方法来实现。

部分、非不相交的继承是指父类和子类之间存在一些共同的属性和方法,但并非所有子类都具有相同的属性和方法。在每表类方案中使用InheritanceType.JOINED策略,可以将父类和子类分别映射为数据库中的不同表,通过外键关联来实现继承关系。

具体处理步骤如下:

  1. 定义父类和子类的实体类,使用@Entity注解进行标识,并使用@Inheritance注解指定继承策略为InheritanceType.JOINED。
  2. 在父类上使用@Id注解标识主键字段,并使用@GeneratedValue注解指定主键生成策略。
  3. 在子类上使用@PrimaryKeyJoinColumn注解指定与父类关联的外键字段。
  4. 使用EntityManager的find()方法可以根据实体类和主键值来查询对应的对象。在查询时,JPA会根据继承关系自动关联父子表,并返回正确的对象。

JPA的InheritanceType.JOINED策略的优势包括:

  1. 数据库表结构清晰,每个实体类对应一个表,避免了冗余字段。
  2. 支持多态查询,可以根据父类查询子类对象。
  3. 灵活性高,子类可以根据自身需求添加额外的字段和方法。

应用场景:

  1. 在一个继承关系中,父类和子类之间存在部分、非不相交的属性和方法。
  2. 需要根据父类查询子类对象的场景。

推荐的腾讯云相关产品:

腾讯云提供了多种云计算产品和服务,以下是一些与JPA相关的产品:

  1. 云数据库MySQL:提供高性能、可扩展的MySQL数据库服务,适用于存储JPA实体对象。 链接:https://cloud.tencent.com/product/cdb
  2. 云服务器(CVM):提供弹性、安全的云服务器,可用于部署JPA应用程序。 链接:https://cloud.tencent.com/product/cvm

请注意,以上推荐的产品仅为示例,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring 全家桶之 Spring Data JPA(一)

其中表明user及主键名称id是变化,其余部分是固定结构,而实体名称和属性是与数据库名和字段是一一对应,因此可以通过实体名记属性确定要操作数据库和字段名字,从而可以根据实体不同拼接出不同...高级特性    JPA 能够支持面向对象高级特性,如之间继承、多态和之间复杂关系,这样支持能够让开发者最大限度使用面向对象模型设计企业应用,而不需要自行处理这些特性关系数据库持久化...三、如何使用JPA API 3.1 - 基本增删改查实现 创建Customer实体对应数据库customer CREATE TABLE customer ( cust_id bigint(32...test包创建CustomerDaoTest,使用Junit进行JPA测试 ``` java public class CustomerDaoTest { @Test public...,可以静态代码块内创建EntityManagerFactory 内部维护了数据库连接信息 内部维护了缓存信息 内部维护了所有的实体管理对象 可以根据配置选创建或者创建实体对应数据库

1.4K20

Spring data 相关注解

此篇记录大部分自己学习中用到Spring data 注解,附带记录了一些业务中经常用到其他注解 ---- @JsonIgnoreProperties 注解 作用是json序列化时将Java...---- @MappedSuperclass 注解 进行实体封装时,id、状态、时间等,这些实体重复公共属性可以声明一个超统一进行设置,加上@MappedSuperclass注解,然后实体继承即可...@MappedSuperclass标识表示其不能映射到数据库,因为其不是一个完整实体,但是它所拥有的属性能够隐射在其子类对用数据库 @MappedSuperclass标识得嘞不能再有@Entity...: JPA自动选择合适策略,是默认选项; SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式 TABLE:通过产生主键,框架借由模拟序列产生主键...可以用来使用jpa时记录一些业务无关字段,比如最后更新时间等等。

2K20

Spring Data开发手册|Java持久化API(JPA)需要了解到什么程度呢?

使用JPA,就可以把我们应用从Hibernate解脱出来,那么现在问题来了::如何使用JPA来开发呢? 准备好了吗,进入正题,起飞! 首先,先带大家看一下本篇文章大致介绍。...JPA是一套规范,只要我们ORM框架实现了这套规范,那么使用这个ORM框架时候,就不需要面对于某一种ORM产品API来进行编程,而是统一面向于JPA来进行编程,这个时候即使你ORM产品改变了...对象状态 对象状态: 新建状态: User user = new User();和数据库以及内存没有任何关联,对象仅仅是被new出来之后这种状态 托管状态: 对象调用了find persist...clear:表示是清楚内存和数据库数据对应关系 删除状态: 当前对象close之后对象这种状态,就称为删除状态 注意事项 写默认就是作为名 column写,列名就是属性名...@GeneratedValue后面值写默认是auto 结语 JPA是我们开发离不开经常用到技术,其涉及技术和知识面其实远不止上面列出这些。

1.3K30

实战:应用对持久数据访问| 从开发角度看应用架构9

几者之间关系: 一个entity其实就是一个class,只是定了与数据库对应。如上图,class叫大魏,数据库也有一张叫大魏(名称可以和数据库名不同,使用@Table指定即可)。 ?...大魏这个,在被生成对象时,会从数据库读数据,然后可能会对数据修改,修改这些数据,会存到持久性上下文中(运行在内存),默写情况下,会被存回数据库(例如提交)。...void setCustName(String custName) { this.custName = custName; } ... } 实体字段和属性 实体瞬态数据会持久保存到数据库...JPA提供者既可以将数据库数据加载到实体,也可以将实体数据存储到数据库。 提供者访问状态方式称为访问模式。 有两种访问模式:基于字段访问和基于属性访问。...JPA提供程序启动时使用JNDI查找服务按名称查找数据源。 4可以属性元素设置其他标准或特定于供应商属性。 hibernate.Dialect属性指定使用哪个数据库。

1.6K30

jpaspringdata(1)jpa

1.什么是jpa 假如学过hibernatejpa会发现非常简单,因为是同一个人写jpa是第三方orm框架一种规范,hibernate作为jpa 一个子集 2.需要导入jar 这里使用是...@GeneratedValue/*获取主键方式,主键id描述,hibernate以及mybatisresultmap都是描述为id标签, 这里获取主键方式有IDENTITY:采用数据库...方法,但是不需要与数据库相关联,   那么get方法上使用@Transient,jap处理注解方法上注解,其余都在get方法上,Column还具有以下一些属性 ,unique(唯一) 、   ...")},//joinColumns 映射当前所在中间外键,name 指定外键列列名, referencedColumnName 指定外键列关联当前哪一列,inverseJoinColumns...备注:其它基本上与hql一致,个人还是写sql写比较多,然后使用方式也有// 8.spring整合jpa <?xml version="1.0" encoding="UTF-8"?

2K20

SpringDateJPA 系列之 JPA 相关操作

1.1 JPA 使用 1.1.1 JPA API ☞ Persistence 对象   Persistence 对象主要作用是用于获取 EntityManagerFactory 对象 。...☞ EntityManager    JPA 规范,EntityManager 是完成持久化操作核心对象。...实体作为普通 java 对象,只有调用 EntityManager 将其持久化后才会变成持久化对象。EntityManager 对象一组实体与底层数据源之间进行 O/R 映射管理。...JPA 规范, EntityTransaction 是完成事务操作核心对象,对于 EntityTransaction 我们 java 代码承接功能比较简单。  ...其特征与原生SQL语句类似,并且完全面向对象,通过名和属性访问,而不是名和属性。

1.9K10

《深入实践Spring Boot》阅读笔记之一:基础应用开发

第二部分 - 实践维度 用生产环境实际案例讲解如何使用Spring Boot开发分布式应用和云应用,以及如何用微服务构建高可用服务平台。...使用Redis Redis没有结构概念,所以要实现MySQL数据库数据Redis存取,必须做一些转换,可以使用JSON格式文本作为Redis与Java普通对象互相交换数据存储格式。...Neo4j将结构化数据存储一张图上,图中每一个节点属性表示数据内容,一条有向边表示数据关系。它没有结构概念,它数据用节点属性来表示。...扩展JPA功能 使用JPA资源库接口定义不但可以按照其规则约定方法声明各种方法,还可以使用注解@Query来定义一些简单查询语句,优化SQL语句。...然后,JPA配置,通过@EnableJpaRepositories加载定义装配

1.8K90

一篇 JPA 总结

指定使用哪个持久化框架以及配置该框架基本属性 创建实体使用 annotation 来描述实体跟数据库之间映射关系 使用 JPA API 完成数据增、删、改、查操作 创建 EntityManagerFactory...规范要求路径 META-INF 目录下防止 persistencce.xml,文件名称是固定 <?...,指出该Java 为实体,将映射到指定数据库。...**@Table** 当实体与其映射数据库名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用 **@id** @Id 标注用于声明一个实体属性映射为数据库主键列...关联关系映射(使用 IDEA 可以使用实体生成,也可以使用对应逆向生成实体) 单向多对一(orders - customer) 结构(oreders 中有 customer 外键映射

5.6K20

Spring Data JPA 就是这么简单

jpa 全称是 Java Persistence API , 中文字面意思就是 java 持久层 API , jpa 就是定义了一系列标准,让实体和数据库建立一个对应关系,当我们使用...create-drop :慎用,当项目关闭,数据库会被删掉。 validate :验证数据库和实体属性是否匹配,匹配将会报错。 综上:个人感觉还是使用 update 较为稳妥。...使用上述实体注解,当运行项目的时候就会在数据库中生成一个名是 stu 继承分析 下面来研究一下之间存在继承关系时候,jpa 又是如何处理继承关系呢?...jpa如何处理上述三种情况呢?...之间关系分析 在数据库当中表和之间都是有一定关联关系jpa如何在实体之间建立和数据库类似的关联关系呢?

6.8K50

springBoot注解与分析

如果没有配置的话,Spring Boot会扫描启动所在包下以及子包下使用了@Service,@Repository等注解。...一般用于jpa这两个注解一般一块使用,但是如果名和实体名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父entity上。父属性子类可以继承。...RequestMapping是一个用来处理请求地址映射注解,可用于或方法上。 用于上,表示所有响应请求方法都是以该地址作为父路径。...容器中一定拥有某个Bean 时, 可以需要自动注入该类 Bean 地方可以使用 @Autowired(required = false), 这等于告诉Spring:找不到匹配Bean时也抛出...一般用于jpa这两个注解一般一块使用,但是如果名和实体名相同的话,@Table可以省略 @Column:通过@Column注解设置,包含设置如下 name:数据库表字段名 unique:是否唯一

1.1K10

SpringBoot最全注解大全

如果没有配置的话,Spring Boot会扫描启动所在包下以及子包下使用了@Service,@Repository等注解。...一般用于jpa这两个注解一般一块使用,但是如果名和实体名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父entity上。父属性子类可以继承。...RequestMapping是一个用来处理请求地址映射注解,可用于或方法上。 用于上,表示所有响应请求方法都是以该地址作为父路径。...@MappedSuperclass 标识表示其不能映射到数据库,因为其不是一个完整实体,但是它所拥有的属性能够映射在其子类对用数据库 3....:默认情况下,会使用所有瞬态(non-transient)和静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。

5.3K30

spring boot 中使用 jpa以及jpa介绍

大家好,又见面了,我是你们朋友全栈君。 最近在项目中使用了一下jpa,发现还是挺好用。这里就来讲一下jpa以及spring boot使用。 在这里我们先来了解一下jpa。...2.3简单方便 JPA主要目标之一就是提供更加简单编程模型:JPA框架下创建实体和创建Java 一样简单,没有任何约束和限制,只需要使用 javax.persistence.Entity进行注释...2.4高级特性 JPA 能够支持面向对象高级特性,如之间继承、多态和之间复杂关系,这样支持能够让开发者最大限度使用面向对象模型设计企业应用,而不需要自行处理这些特性关系数据库持久化...@GeneratedValue 指定如何标识属性可以被初始化,例如自动、手动、或从序列表获得值。 @Transient 指定属性,它是持久,即:该值永远不会存储在数据库。...以上我们完成了基本配置工作,记下来看一下如何进行与实体映射,以及数据访问接口。

3.8K10

JPA 详解

实现这个规范后开发者可以使用相同代码可以在任意数据库执行CRUD操作,实现框架不仅仅是处理和数据库交换代码(JDBC),同时也会将数据库数据和Java对象映射起来,无需手动进行转换。...对象关系信息:应用开发者必须提供数据库数据和Java对象之间对应关系 JPQL: JPA目的是抽象具体数据库,框架仍然提供了SQL方式处理特殊方法 项目实战 首先创建项目: mvn archetype...注解@Column 是用来映射Java对象和,及时不加注解,JPA仍然会映射,除非其使用注解@Transient修饰,则不会被映射。...可以JPA整个项目混用注解字段或者方法,但是一个实体和它子类需要确保使用是同一种注解方式。...中提供了@JoinTable明确其和哪个做join,joinColunms和inverseJoinConlumns则表示如何做JOIN。

4.8K20

SpringBoot注解最全详解(整合超详细版本)

如果没有配置的话,Spring Boot会扫描启动所在包下以及子包下使用了@Service,@Repository等注解。...一般用于jpa这两个注解一般一块使用,但是如果名和实体名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父entity上。父属性子类可以继承。...RequestMapping是一个用来处理请求地址映射注解,可用于或方法上。 用于上,表示所有响应请求方法都是以该地址作为父路径。...@MappedSuperclass 标识表示其不能映射到数据库,因为其不是一个完整实体,但是它所拥有的属性能够映射在其子类对用数据库 3....:默认情况下,会使用所有瞬态(non-transient)和静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。

4.7K10

Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍

在上一篇《Spring Data JPA系列2:快速SpringBoot项目中熟练使用JPA也知晓了SpringBoot项目快速集成SpringData JPA以及快速上手使用JPA来进行基本项目开发技能...先看下蓝色部分其实就是Repository一整个接口定义链条,而橙色则是我们自己自定义一些Repository接口继承父层接口所有已有能力。...额外补充一句: 实际项目编码,大部分场景,我们自定义Repository都是继承JpaRepository来实现。...通过本篇内容,我们对于如何在项目中使用Spring Data JPA来进行一些较为复杂场景处理方案与策略有了进一步了解,再结合本系列此前内容,到此掌握JPA相关技能已经足以应付大部分项目开发场景...》 可靠保障 —— 《聊一聊数据库事务,以及Spring体系下对事务使用》 周边扩展 —— 《JPA开发辅助效率提升方案介绍》 ---- 我是悟道,聊技术、又不仅仅聊技术~ 期待与你一起探讨,一起成长为更好自己

1.2K20

SpringBoot注解最全详解(整合超详细版本)

如果没有配置的话,Spring Boot会扫描启动所在包下以及子包下使用了@Service,@Repository等注解。...一般用于jpa这两个注解一般一块使用,但是如果名和实体名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父entity上。父属性子类可以继承。...RequestMapping是一个用来处理请求地址映射注解,可用于或方法上。 用于上,表示所有响应请求方法都是以该地址作为父路径。...标识表示其不能映射到数据库,因为其不是一个完整实体,但是它所拥有的属性能够映射在其子类对用数据库 @MappedSuperclass 标识不能再有@Entity或@Table注解...:默认情况下,会使用所有瞬态(non-transient)和静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。

63210

Spring Boot2+JPA之悲观锁和乐观锁实战

我们开发项目中,大量请求,或者同时操作,很容易导致系统在业务上发生并发问题。通常讲到并发,解决方案无非就是前端限制重复提交,后台进行悲观锁或者乐观锁限制。 ?...javasynchronized和ReentrantLock重入锁等锁就是悲观锁,数据库中表锁、行锁、读写锁等也是悲观锁。...只要在需要查询sql后面加上for update,就能锁住查询行,特别要注意查询条件必须要是索引列,如果不是索引就会变成锁,把整个都锁住。...对于映射到多个实体,必须将其放置主表 type of a version attribute must be one of the following: int, Integer, long,...因为使用时候该线程会独占这个资源,就适合用悲观锁,否则用户只是浏览文章的话,用悲观锁就会经常加锁,增加了加锁解锁资源消耗。 乐观锁适合写少读多场景。

3.4K50

SpringDataJPA 系列之 JPA 简介

对象和关系数据是业务实体两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存对象之间存在关联和继承关系,而在数据库,关系数据无法直接表达多对多关联和继承关系。...JPA 由 EJB 3.0 软件专家组开发,作为 JSR-220 实现部分。但它又不限于 EJB 3.0,你可以 Web 应用、甚至桌面应用中使用。...☞ 高级特性   JPA 能够支持面向对象高级特性,如之间继承、多态和之间复杂关系,这样支持能够让开发者最大限度使用面向对象模型设计企业应用,而不需要自行处理这些特性关系数据库持久化...通过输出日志可以发现,JPA 会先将与实体类同名删除,然后依据实体创建一个,接着将数据插入新创建。这是怎么回事,那不是数据库永远只有一条数据?...注解 ☞ 常用注解 注解 说明 属性 @Entity 指定当前是实体 @Table 指定实体之间对应关系,指定则默认名为名全小写 name:指定数据库名称 @Id 指定当前字段是主键

4.3K20
领券