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

如何在hibernate中仅创建子类表(@瞬态@实体)

在Hibernate中,可以使用继承关系来映射数据库中的表结构。当我们需要创建一个子类表时,可以使用@Transient注解来标记该子类为瞬态实体,即不需要在数据库中创建对应的表。

具体步骤如下:

  1. 创建父类和子类的实体类。父类使用@Entity注解标记为实体类,子类使用@Transient注解标记为瞬态实体类。
代码语言:txt
复制
@Entity
@Table(name = "parent_table")
public class Parent {
    // 父类属性和方法
}

@Transient
public class Child extends Parent {
    // 子类属性和方法
}
  1. 在Hibernate配置文件中配置继承关系。使用@Inheritance注解标记父类,并指定继承策略为SINGLE_TABLE,即将父类和子类的数据存储在同一个表中。
代码语言:txt
复制
@Entity
@Table(name = "parent_table")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Parent {
    // 父类属性和方法
}
  1. 在数据库中创建表。由于子类被标记为瞬态实体,Hibernate不会为子类创建对应的表。
  2. 使用Hibernate进行数据操作。可以通过父类的引用来操作子类的对象。
代码语言:txt
复制
Parent parent = new Parent();
parent.setName("Parent");

Child child = new Child();
child.setName("Child");

session.save(parent);
session.save(child);

总结: 在Hibernate中,通过使用@Transient注解标记子类为瞬态实体,可以实现仅创建父类表而不创建子类表的功能。这在某些场景下非常有用,例如子类只是作为父类的特定实现,不需要单独存储数据。

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

相关·内容

初识Hibernate之理解持久化类

Hibernate通过生成代理对象来优化框架性能是很常见的操作,而大部分生成代理的方式是通过javassist生成持久化的子类进行代理,如果持久化被定义为final,显然是无法进行代理的。      ...而持久化对象主要有以下三个不同状态: 瞬态:对象刚刚被new创建出来,只是一个普通的类对象。...1、持久化实体对象      持久化实体对象也可以理解为插入一条记录到数据,反正最终都是让我们new出来的持久化对象和数据的某一行相关联。...我们首先创建了一个user的持久化对象,此时该对象只是一个普通Java对象并不具备持久化能力,这个状态就是瞬态。...3、删除持久化实体      Hibernate中提供delete方法通过持久化对象来删除数据的一行记录。

1K80
  • 应用对持久数据的管理 | 从开发角度看应用架构7

    主键字段用于将实体实例映射到数据库的行。 所有非瞬态属性都映射到数据库的字段。 在数据库,entity的每个持久实例都有一个持久性标识,该标识在唯一标识。...orm.xml包含将Java类声明为实体所需的所有配置细节。 @Table @Table注解用于指定实体类和之间的映射。 当实体类的名称与数据库名不同时使用它。...序列必须在数据库创建,并且序列名称在生成器元素中提供。...在EJB创建实体管理器 为持久单元创建一个EntityManagerFactory对象,并且该对象用于获取EntityManager的一个实例 @Statelesspublic class ItemService...但是,此事务适用于基于实体管理器的单个数据源上的操作,这限制了跨越多个数据源或消息传递系统的更复杂的事务。

    2.7K40

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

    实体的非瞬态数据会持久保存到数据库。...JPA提供者既可以将数据库的数据加载到实体,也可以将实体的数据存储到数据库。 提供者访问状态的方式称为访问模式。 有两种访问模式:基于字段的访问和基于属性的访问。...//Setter methods } 四、实体的四种状态 实体的四种类型: New State: 使用Java新运算符创建实体实例处于新状态或瞬态状态。...merge()方法为处于新状态或瞬态状态的实体在数据库插入新行。 合并操作之后,实体处于受管理状态。...在JTA类型的事务,容器负责创建和跟踪实体管理器。在RESOURCE_LOCAL,您负责创建和跟踪实体管理器。 3jta-data-source是数据源的名称。

    1.6K30

    Spring Boot 嵌入式服务器、Hibernate 关系和 Spring Data 全解析

    这意味着 Hibernate 提供了从 Java 类到数据库的映射,同时还提供了数据查询和检索功能。 事务 事务只是表示工作单元。在这种情况下,如果一步失败了,整个事务就会失败(这被称为原子性)。...关系 使用 Hibernate,如果我们想在两个实体之间建立关系,则之间必须存在外键关系,我们称之为引用完整性。...一对一 多对一 多对多 一对多 实体生命周期 在 Hibernate ,我们可以创建一个实体的新对象并将其存储到数据库,也可以从数据库获取实体的现有数据。...Hibernate 生命周期主要有四种状态: 瞬态状态 持久状态 分离状态 已移除状态 Spring Data Spring Data 是一个用于在 Spring 应用程序访问数据的项目集合。...它是在 JPA 之上的一个抽象,允许您使用更简单和更方便的 API 执行对数据库的 CRUD(创建、读取、更新、删除)操作。Spring Data JPA 还提供了其他功能,分页、动态查询生成等。

    27920

    Hibernate【映射】续篇

    这里写图片描述 ---- 把所有子类映射成一张 前面我们采用的是:每个子类都需要写成一个配置文件,映射成一张… 如果子类的结构很简单,只比父类多几个属性。...就像上面的例子…我们可以将所有的子类都映射成一张 但是呢,这样是不符合数据库设计规范的…..因为的数据可能是猫,可能是猴子…这明显是不合适的… 由于可能存在猫,存在猴子,为了区分是什么类型的...这里写图片描述 实体 实体和上面雷同,只多了一个猴子的实体表 Monkey.java public class Monkey extends Animal { // 吃香蕉 private String...这里写图片描述 ---- 每个类映射一张(3张) 父类和子类都各对应一张。...这里写图片描述 ---- (推荐)每个子类映射一张, 父类不对应(2张) 使用过了一张保存所有子类的数据,这不符合数据库设计规范 每个子类、父类都拥有一张..结构太过于繁琐..添加信息时,过多的

    76860

    Hibernate面试题大全

    Hibernate怎样实现类之间的关系?(:一对多、多对多的关系) Hibernate怎样实现类之间的关系?...在Hibernate,@NameQuery用来定义单个的命名查询,@NameQueries用来定义多个命名查询。 为什么在Hibernate实体要提供一个无参数的构造器这一点非常重要?...为什么在Hibernate实体要提供一个无参数的构造器这一点非常重要?...每个Hibernate实体类必须包含一个 无参数的构造器, 这是因为Hibernate框架要使用Reflection API,通过调用Class.newInstance()来创建这些实体类的实例。...如果在实体找不到无参数的构造器,这个方法就会抛出一个InstantiationException异常。 可不可以将Hibernate实体类定义为final类?

    2K50

    springboot 根据实体类生成数据库中表BaseEntity(公共实体)配置文件application.yml 子类实体

    updatePaper; //修改人 } 注意: 1.标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库,但是他的属性都将映射到其子类的数据库字段。...: update show-sql: true 其中spring.jpa.hibernate.ddl-auto的属性有以下几种参数: create:每次加载hibernate会自动创建,以后启动会覆盖之前的...update:加载hibernate时根据实体类model创建数据库,这是名的依据是@Entity注解的值或者@Table注解的值,sessionFactory关闭不会删除,且下一次启动会根据实体...model更新结构或者有新的实体类会创建新的。...validate:启动时验证的结构,不会创建 none:启动时不做任何操作 子类实体: import javax.persistence.*; @Data @Entity public class

    4.9K00

    Hibernate映射继承关系

    Hibernate,继承关系是指一个实体类继承自另一个实体类。...Hibernate实体类是指对应于数据库中一张的Java类,继承关系的映射将子类和父类的属性映射到同一张或者分别映射到不同的。...在Hibernate,继承关系的映射方式主要有三种,分别是单继承、多表继承和一对一继承。单继承在单继承,继承关系的子类和父类使用同一个。...子类和父类有共同的属性,而子类定义的新属性,则沿用父类的属性,使用null来填充该属性。在映射到数据库时,使用的一个自增长id来区分子类和父类实体。...多表继承多表继承是指每个实体类都映射到不同的,这样可以彼此独立地进行操作。父类和子类之间是基于主键的关系映射,因此,在关系需要定义外键来表达继承关系。

    52130

    SpringBoot最全注解大全

    一般用于jpa这两个注解一般一块使用,但是如果名和实体类名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。...@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件的一对一,一对多,多对一。.../json,text/html; produces:指定返回的内容类型,当request请求头中的(Accept)类型包含该指定类型才返回 @RequestParam:用在方法的参数前面。...@MappedSuperclass 标识的类表示其不能映射到数据库,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库 3....,该字段创建的SQL语句,一般用于通过Entity生成定义时使用,如果数据库中表已经建好,该属性没有必要使用 (8) table属性:table属性定义了包含当前字段的名 (9) length属性:

    5.5K30

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

    一般用于jpa这两个注解一般一块使用,但是如果名和实体类名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。...@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件的一对一,一对多,多对一。.../json,text/html; produces:指定返回的内容类型,当request请求头中的(Accept)类型包含该指定类型才返回 @RequestParam:用在方法的参数前面。...@MappedSuperclass 标识的类表示其不能映射到数据库,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库 3....,该字段创建的SQL语句,一般用于通过Entity生成定义时使用,如果数据库中表已经建好,该属性没有必要使用 (8) table属性:table属性定义了包含当前字段的名 (9) length属性:

    4.8K10

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

    一般用于jpa这两个注解一般一块使用,但是如果名和实体类名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。...@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件的一对一,一对多,多对一。.../json,text/html; produces:指定返回的内容类型,当request请求头中的(Accept)类型包含该指定类型才返回 @RequestParam:用在方法的参数前面。...因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库 @MappedSuperclass 标识的类不能再有@Entity或@Table注解 @Column: 1.当实体的属性与其映射的数据库的列不同名时需要使用...,该字段创建的SQL语句,一般用于通过Entity生成定义时使用,如果数据库中表已经建好,该属性没有必要使用 table属性:table属性定义了包含当前字段的名 length属性:length

    73710

    Spring Boot(12):轻松搞定关系型数据库,Spring Boot与JPA的完美结合!

    本篇文章将介绍如何在Spring Boot整合JPA,实现对数据库的访问和操作。 2. 摘要 本文将通过一个简单的示例来介绍如何在Spring Boot整合JPA。...首先,我们会创建一个简单的实体类,并使用JPA注解来映射到数据库上。然后,我们会编写一个Repository类,用于对数据库进行增删改查操作。...=true # 自动创建/更新结构 spring.jpa.hibernate.ddl-auto=update # 数据库方言,可以自动根据数据库类型选择 spring.jpa.properties.hibernate.dialect...=org.hibernate.dialect.MySQL5Dialect 3.2.2 创建一个简单的实体类 我们先来创建一个简单的实体类,并使用JPA注解来映射到数据库上。...小结 本文介绍了如何在Spring Boot整合JPA,通过一个简单的示例演示了如何使用JPA注解定义实体类,并编写Repository类来对数据库进行操作。

    49050

    微服务架构之Spring Boot(四十四)

    30.3.3创建和删除JPA数据库 默认情况下,当您使用嵌入式数据库(H2,HSQL或Derby)时,才会自动创建JPA数据库。您可以使用 spring.jpa.* 属性显式配置JPA设 置。...例如,要创建和删除,可以将以下行添加到 application.properties : spring.jpa.hibernate.ddl-auto=create-drop Hibernate自己的内部属性名称...您可以使 用 spring.jpa.properties.* (在将它们添加到实体管理器之前删除前缀)来设置它以及其他Hibernate本机属性。...以下行显示 了为Hibernate设置JPA属性的示例: spring.jpa.properties.hibernate.globally_quoted_identifiers=true 前面示例的行将...hibernate.globally_quoted_identifiers 属性的值 true 传递给Hibernate实体管理器。

    1.3K20

    SpringBoot注解最全详解

    一般用于jpa这两个注解一般一块使用,但是如果名和实体类名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。...@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件的一对一,一对多,多对一。.../json,text/html; produces:指定返回的内容类型,当request请求头中的(Accept)类型包含该指定类型才返回 @RequestParam:用在方法的参数前面。...@MappedSuperclass 标识的类表示其不能映射到数据库,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库 3....,该字段创建的SQL语句,一般用于通过Entity生成定义时使用,如果数据库中表已经建好,该属性没有必要使用 8 table属性:table属性定义了包含当前字段的名 9 length属性:

    1.2K20

    Hibernate配置文件详解-1

    -- 指定生成数据的策略 --> 1.update:Hibernate初始化时检测实体关系映射文件对应的数据是否已经创建...2.create:Hibernate初始化时会创建新的数据,如果数据已经存在,直接删除重新创建,会造成数据丢失,实际开发不用。...3.create-drop:Hebarinate初始化时创建数据,程序运行结束的时候会删除相应的数据,在实际开发不用。...属性: name:实体类名。 table:对应数据库名。 discriminator-value:默认和类名一样,一个用于区分不同的子类的值,在多态行为时使用。...实体类的属性数据类型必须与数据对应的字段数据类型一致: int对应int,String对应varchar。 如何进行映射呢?

    1.4K20

    SpringBoot注解最全详解

    一般用于jpa这两个注解一般一块使用,但是如果名和实体类名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。...@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件的一对一,一对多,多对一。.../json,text/html; produces:指定返回的内容类型,当request请求头中的(Accept)类型包含该指定类型才返回 @RequestParam:用在方法的参数前面。...@MappedSuperclass 标识的类表示其不能映射到数据库,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库 3....,该字段创建的SQL语句,一般用于通过Entity生成定义时使用,如果数据库中表已经建好,该属性没有必要使用 8 table属性:table属性定义了包含当前字段的名 9 length属性:

    92620

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

    @RestController:用于标注控制层组件 ( struts 的 action),@ResponseBody 和 @Controller 的合集。...@OneToOne、@OneToMany、@ManyToOne:对应 hibernate 配置文件的一对一,一对多,多对一。...application/json,text/html; - produces: 指定返回的内容类型,当 request 请求头中的 (Accept) 类型包含该指定类型才返回 @RequestParam...@MappedSuperclass 标识的类表示其不能映射到数据库,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库 3....,该字段创建的 SQL 语句,一般用于通过 Entity 生成定义时使用,如果数据库中表已经建好,该属性没有必要使用 - table 属性:table 属性定义了包含当前字段的名 - length

    92140

    后端必备:常用注解总结!

    一般用于jpa这两个注解一般一块使用,但是如果名和实体类名相同的话,@Table可以省略 @MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。...@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件的一对一,一对多,多对一。.../json,text/html; produces:指定返回的内容类型,当request请求头中的(Accept)类型包含该指定类型才返回 @RequestParam:用在方法的参数前面。...因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库 @MappedSuperclass 标识的类不能再有@Entity或@Table注解 @Column: 1.当实体的属性与其映射的数据库的列不同名时需要使用...,该字段创建的SQL语句,一般用于通过Entity生成定义时使用,如果数据库中表已经建好,该属性没有必要使用 table属性:table属性定义了包含当前字段的名 length属性:length属性表示字段的长度

    82740
    领券