`
苹果超人
  • 浏览: 198255 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JPA entity继承策略

    博客分类:
  • java
jpa 
阅读更多
JPA支持3种类型的继承形式:
1.Single Table Strategy ,单表策略,一张表包含基类与子类的所有数据,很多情况下都是采用这样的冗余设计,通过一个discriminator来区分。

2.Table Per Class Strategy ,每个子类对应一张表,每张表都拥有基类的属性,基类不会生成表。

3.Join Strategy ,仍然是每个子类对应一张表,但此表中不包含基类的属性,仅仅是此子类的扩展属性,共享基类的属性。

下面是SingleTable的一个小例子:
基类:
package com.kevin.ejb.extendtable;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table(name = "t_animal")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "animalType", discriminatorType = DiscriminatorType.STRING)
public class Animal {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int id;
	private String name;
	private String sex;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	
}

子类:
package com.kevin.ejb.extendtable;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table(name = "t_cat")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "cat")
public class Cat extends Animal {

	private String nickname;

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	
}

子类:
package com.kevin.ejb.extendtable;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table(name = "t_dog")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "dog")
public class Dog extends Animal {

	private String address;

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	
	
}


生成的数据库表:

分享到:
评论

相关推荐

    JPA环境搭建及JPA实例与JPA主键生成策略

    这个接口继承了`JpaRepository`,允许我们进行CRUD操作,而无需编写SQL。 通过以上步骤,你就成功地搭建了JPA环境,并理解了如何创建JPA实体和设置主键生成策略。继续深入学习,你将能够利用JPA的强大功能,如查询...

    使用jpa映射关联和继承

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

    jpa例子jpajpa

    8. **多态性(Polymorphism)**: JPA支持继承和多态性,使得你可以定义一个基类,然后多个子类继承它并有自己的数据库表。 在"apache-openjpa-1.2.0-source"这个压缩包中,包含了Apache OpenJPA项目的源代码。Open...

    jpa.rar_Java JPA

    JPA支持多种继承策略,如单表继承(Single Table)、联合继承(Table per Class Hierarchy)和分层继承(Table per Concrete Class)。这些策略影响了子类如何在数据库中表示,以及查询时如何处理继承层次结构。 四...

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

    JPA提供了三种继承策略: - **单表继承 (Single Table Inheritance)**:所有子类数据存储在同一张表中,使用`@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`。 - **联合继承 (Joined Table Inheritance)**...

    JPA 标注 JPA标签手册

    - `@Inheritance`:控制继承策略,如单一表继承或多表继承。 2. **属性映射(Attribute Mapping)**: - `@Basic`:用于基本类型的字段,表明其为简单的属性。 - `@Column`:定义属性映射到数据库表的列,包括...

    jpa实现数据库操作

    7. **JPA的继承策略** - **单一表策略(Single Table)**: 所有子类信息存储在一个表中。 - **联合类策略(Joined Table)**: 每个子类都有自己的表,父类属性共享一个表。 - **表格-per-hierarchy(Table-per-...

    JPA (一)

    这些类通常会继承 `javax.persistence.Entity`,并且通过 `@Entity` 注解标记。实体类中的属性对应于数据库表的列。 2. **实体管理器(EntityManager)** - 它是 JPA 的核心组件,负责与数据库交互。它创建、更新、...

    JPA大全之经典全集

    此外,还会涉及JPA的事务策略、事件监听器和性能调优技巧等内容,帮助开发者在实际项目中高效使用JPA。 ### JPA批注参考 JPA批注(Annotations)是声明式地将ORM元数据附加到Java类和属性上的方式。常见的批注有`@...

    jpa经典文档呀

    7. **继承映射**:JPA允许实体类继承,提供了单表继承、联合继承和多表继承等多种策略。 8. **关联映射**:JPA支持一对一、一对多、多对一和多对多的关系映射,通过@OneToOne、@OneToMany、@ManyToOne和@ManyToMany...

    JPA API CHM

    JPA支持多种继承策略,如SINGLE_TABLE、JOINED和TABLE_PER_CLASS,它们决定了如何将继承层次结构映射到数据库。 **7. Relationships** JPA支持多种关系映射,包括一对一(OneToOne)、一对多(OneToMany)、多对一...

    JPA讲解视频

    8. **继承映射(Inheritance Mapping)**:JPA支持单表继承、联合继承和表格分层等策略,使你可以设计复杂的对象模型。 9. **懒加载(Lazy Loading)**:默认情况下,JPA实现如Hibernate支持懒加载,即关联的对象只...

    JPA教程(全部为PDF格式的电子书)

    2. **事务管理**:介绍JPA的事务策略,如REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED和NEVER。 3. **缓存机制**:讲解一级缓存(Entity Manager级别)和二级缓存(Provider级别)的原理和使用。 4....

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

    - **继承(Inheritance)**: 支持单表继承、联合继承和表分层继承等多种继承策略。 - **转换(Conversion)**: JPA允许自定义类型转换,将非标准类型持久化到数据库。 - **事件监听(Lifecycle Events)**: 提供了预...

    jpa的学习---jpa demo工程

    - **配置Repository**:定义接口继承`JpaRepository`或自定义方法,JPA会自动实现这些方法。 - **编写业务逻辑**:在服务层实现业务操作,调用Repository中的方法。 - **测试**:编写JUnit测试用例,验证JPA功能...

    jpa 全面学习资料

    - **继承映射(Inheritance Mapping)**: 包括单表继承、联合继承和表格派生。 - **复合主键(Composite Key)**: 当主键由多个字段组成时的处理。 - ** Criteria 查询**: 动态构建查询的API,提供更多灵活性。 **6...

    学习hibernate必读,JPA2新特征和JPA2映射的神秘之旅。

    - **继承映射**:支持单表继承(Single Table Inheritance)、联合继承(Joined Table Inheritance)和表-per-class-hierarchy策略。 - **关联映射的级联操作**:如`CascadeType.ALL`,可将操作自动应用到关联的...

    java springboot+jpa

    - **继承(Inheritance)**: JPA 支持单表继承、联合继承和表格继承三种策略。 **3. Spring Data JPA** Spring Data JPA 是 Spring 社区的一个子项目,它是 Spring Data 框架的一部分,提供了针对 JPA 的高级抽象...

    JPA技术.zip_JPA开发文档_SpringBoot JPA

    9. **继承策略**:JPA提供了单表继承(Single Table Inheritance)、联合继承( Joined Table Inheritance)、表分离继承(Table per Class Inheritance)等策略,以处理复杂的类继承关系。 10. **查询语言**:Java...

Global site tag (gtag.js) - Google Analytics