`
zhangfeilo
  • 浏览: 400892 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

JPA 实现继承关系

阅读更多

JPA支持继承关系,使开发者可以利用继承的思想建模。

       有一个实体Person,他是一个抽象实体,他有两个子实体:ManWoman

 

       先写Person类:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
//@DiscriminatorColumn(name="tableName")可选
public class Base implements Serializable {

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private Date createTime = new Date();
 
 @Id
 @GeneratedValue
 private int id;

。。。

}

 

注意,对于抽象父类,必须设置两个注释:

1.         Inheritance     strategy:用来声明继承策略。可选值是InheritanceType.SINGLE_TABLE(为类继承体系中的每个类创建一张相同的表)、InheritanceType.JOINED(为类继承体系中的每个类创建不同的表)和InheritanceType .TABLE_PER_CLASS(将属性映射到子类中)。缺省值是InheritanceType.SINGLE_TABLE,表示只生成一张表。

2.         DiscriminatorColumn     name:用来说明子类使用那个字段区分,这里使用sex字段区分Man实体和Woman实体。

 

 

编写Man类和Woman类:

@Entity
//@DiscriminatorValue(value="users")可选
public class Users extends Base implements Serializable {
 
 private String remark="";

。。。

}

 

@Entity
//@DiscriminatorValue(value="role")可选
public class Role extends Base implements Serializable {
 
 private String name = "";

 

 

。。。

}

InheritanceType.JOINED生成多张表:

 DiscriminatorColumn、 DiscriminatorValue不要设置,

 数据库中有3张表:base(id,createTime)、users(id,remark)、role(id,name)

添加user:

Hibernate: insert into Base (createTime) values (?)
Hibernate: insert into Users (remark, id) values (?, ?)

添加role:

Hibernate: insert into Base (createTime) values (?)
Hibernate: insert into Role (name, id) values (?, ?)

删除同删、修改同改、添加同加。

 

 

InheritanceType.SINGLE_TABLE生存同一张表:

子类实体只需要设置DiscriminatorValue属性,当sex值为0时表示Man对象(此对象的womanService字段为null),当sex值为1时表示Woman对象(此对象的manService字段null)。

数据库有1张表:base(id,createTime,remark,name);

 

 

 

 

 

InheritanceType .TABLE_PER_CLASS生成多张表:

 

 

 DiscriminatorColumn、 DiscriminatorValue不要设置,

 

 数据库中有2张表: users(id,remark,createTime)、role(id,name,createTime)

 

关于主键自增+加以下标识

@GeneratedValue(strategy = GenerationType.TABLE, generator = "customer_gen")
 @TableGenerator(
   name = "customer_gen",
   table = "tb_generator_auto",
   pkColumnName = "gen_name",
   valueColumnName = "gen_value",
   pkColumnValue = "CUSTOMER_PK",
   allocationSize = 1
   )

  • src.rar (5.1 KB)
  • 下载次数: 13
0
0
分享到:
评论

相关推荐

    使用jpa映射关联和继承

    本篇文章将深入探讨如何在JPA中映射关联和实现继承。 **一、JPA关联映射** 1. **一对一(OneToOne)映射**:一个实体对象对应数据库中的一个记录。通过`@OneToOne`注解来实现,可以是单向或双向。`@JoinColumn`...

    jpa实现数据库操作

    以上内容涵盖了JPA实现数据库操作的基础知识,随着项目的深入,你可能需要学习更多关于Spring与JPA集成的内容,包括Spring Boot、Spring Data JPA、事务管理、分页查询、自定义查询方法等,这些都是构建高效、可维护...

    springboot结合jpa实现分页,动态多条件查询

    而JPA作为ORM(对象关系映射)规范的实现,使得我们能方便地处理数据库操作。Thymeleaf则是一个强大的服务器端模板引擎,用于生成HTML或其他格式的输出。 首先,确保在项目中添加了Spring Data JPA、Spring Web和...

    jpa例子jpajpa

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理关系数据库中的对象-关系映射(ORM)。它提供了一种方式,让开发者可以用面向对象的编程模型来操作数据库,而无需直接编写SQL语句。JPA允许你在...

    jpa单表递归树形结构实现

    `NodeRepository`可以继承`JpaRepository, Long>`,并添加自定义方法来处理递归查询,例如获取某个节点的所有子孙节点: ```java public interface NodeRepository extends JpaRepository, Long> { List<Node> ...

    Spring JPA 项目简单实现

    4. **Repository接口**:定义一个接口,继承自`JpaRepository, Long>`。这个接口提供了基本的CRUD(创建、读取、更新、删除)操作。例如,可以定义一个`findAll()`方法来获取所有学生信息。 5. **Service层**:创建...

    jpa/hibernate继承注解

    若希望实现懒加载,可以在继承关系中使用`@OneToMany`或`@ManyToOne`注解并设置`fetch = FetchType.LAZY`。 7. **性能考虑** 不同的继承策略对数据库性能和设计有不同影响。STI可能导致表膨胀,而TPC可能导致更多...

    Spring+jpa实现简单的CRUD

    这就是使用Spring和JPA实现简单CRUD的基本步骤。在实际应用中,你可能还需要考虑更多的细节,如错误处理、验证、分页、排序等。同时,可以利用Spring Data JPA的其他功能,如动态查询、自定义查询方法等,以提高开发...

    springboot+JPA+JSP实现登录功能

    2. **JPA (Java Persistence API)**: JPA是Java EE的一部分,它是用来管理关系数据库的对象关系映射(ORM)框架。JPA允许开发者用Java对象来操作数据库,而无需直接编写SQL语句。在Spring Boot中,我们可以使用...

    springboot+jpa+thymeleaf实现简单增删改查

    - 创建一个接口,继承自`JpaRepository`或`CrudRepository`。这些接口提供了基本的CRUD操作,无需编写任何DAO层代码。 5. **创建服务层(Service)** - 定义一个服务类,注入刚才创建的Repository接口,实现业务...

    springboot && JPA实现增删改查demo

    Spring Boot简化了Java应用的初始设置,而JPA作为Java的一个标准,提供了ORM(对象关系映射)功能,让我们能够以面向对象的方式处理数据库操作。 首先,我们需要在Spring Boot项目中添加JPA和相应的数据库驱动依赖...

    JPA详细文档(JPA 批注参考)

    批注是JPA实现ORM的关键,它允许在Java源代码中添加元数据,这些元数据在运行时会被JPA持久化提供程序解析以管理对象的持久化行为。 以下是一些重要的JPA批注及其用途: 1. **实体批注**: - `@Entity`:用于标记...

    JPA图书管理(连接数据库)

    **Java Persistence API (JPA)** 是Java平台上的一个标准,用于管理和持久化对象到关系数据库。JPA通过提供ORM(对象关系映射)能力,使得开发者可以使用面向对象的编程模型来操作数据库,而无需直接编写SQL语句,极...

    JPA视频教程_使用jpa映射关联和继承

    在这个**“JPA视频教程_使用jpa映射关联和继承”**中,我们将深入探讨如何利用JPA来处理实体之间的关联和类的继承关系。 **1. JPA 注解** JPA 注解是实现ORM的主要手段,它们可以直接在实体类上声明,用于定义...

    Spring Data JPA 简化 JPA 开发

    JPA 通过注解或 XML 配置来定义对象与数据库表之间的映射关系,实现了数据持久化。 Spring Data JPA 是 Spring Data 家族的一员,它的设计目标是进一步减少开发人员在数据访问层的工作量。通过 Spring Data JPA,...

    JPA讲解视频

    9. **懒加载(Lazy Loading)**:默认情况下,JPA实现如Hibernate支持懒加载,即关联的对象只在真正需要时才从数据库加载,以提高性能。 10. **事件监听器(Event Listeners)**:JPA允许注册监听器来在特定的生命...

    尚硅谷 jpa

    - **支持面向对象的高级特性**:JPA 支持诸如类继承、多态和复杂关系等面向对象的特性。 #### 四、JPA 技术要点 - **ORM 映射元数据**:可以通过 XML 或 JDK 5.0 注解来定义对象和数据库表之间的映射关系。 - **JPA...

    JPA 标注 JPA标签手册

    了解并熟练使用这些注解是实现JPA高效持久化的关键。在开发过程中,开发者可以根据需求选择合适的注解,通过异常配置来定制实体的行为,以满足特定的数据库交互需求。Oracle TopLink(现为EclipseLink)提供了对JPA ...

Global site tag (gtag.js) - Google Analytics