`
落花虽有意
  • 浏览: 185284 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

EJB3.0里实体bean的继承映射策略

阅读更多

在EJB3.0 里的实体bean继承体系有三种继承映射策略,分别是:

1,InheritanceType.SINGLE_TABLE, 即整个继承体系只映射为一张数据表,这个继承体系的所有类的属性都映射到将

映射到这张表的某个字段。除了所有类属性映射的字段外,为了在这一个张表中区分各个不同的子类数据,因此额外

增加了一个类似于型别码的字段用来区分不同的类,不过该字段不一定实际存在于数据表中。如果不特别指定自己的

型别码字段,EJB3.0 会自动生成一个虚拟的型别码字段(名字为"DTYPE",类型为String),同样型别码的值也可以

自己为每个类指定,也可以自动生成,自动生产时值为类名。joined类型也有 dtype 这个特性

 

2,InheritanceType.JOINED, 每个类映射为一张单独的表,但每一张表中只映射了每个类特有的属性。一个子类对象

的数据由子类映射表里的数据和给类父类映射表里的数据共同组成。

为了区别各个类这个类型也有型别码,详细情况如上面所述。

 

3,InheritanceType.TABLE_PER_CLASS, 每个类映射为一张单独的表,且每张表中不仅包含该表对应类的特有的属性,

还包含了该类可能的父类的所有属性。

 

 

下面分别给出部分示例代码:

 

1,InheritanceType.SINGLE_TABLE

 

数据表:

 

 

 

 

 

 

 

 

 

 

部分代码:

 

// 基类
@SuppressWarnings("serial")
@Entity
@Table(name="league")
// 声明继承类型
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
// 指定自定义的型别码列
@DiscriminatorColumn(name="mydtype",// 数据表中型别码列名
	discriminatorType=DiscriminatorType.STRING, // 类型
					length=20) // String和char可以指定长度
// 指定该类自定义型别码值
@DiscriminatorValue(value="League")
public class League implements Serializable {
	
	private Integer leagueId;
	private String name;
//。。。
}


// 其中一个子类
@SuppressWarnings("serial")
@Entity
@DiscriminatorValue(value="WinterLeague")
public class WinterLeague extends League implements Serializable {

	private String winterInfo;
// 。。。
}

// 插入与查询代码示例
		WinterLeague wl = new WinterLeague("wl1","1111111");
		em.persist(wl);		
		em.flush();		
		
		List<WinterLeague> wlList = em.createQuery("select w from WinterLeague w").getResultList();
		System.out.println("wl size="+wlList.size());

 

 

2,InheritanceType.JOINED

 

这次换成使用系统自动生成的型别码,注意在数据表中加入 dtype字段

注意:只有基类映射的表的主键为自增,子表映射的主键值将由基表主键自动填写

 

数据表图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

部分代码示例:

 

// 基类
@SuppressWarnings("serial")
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="league")
public class League implements Serializable {
	
	private Integer leagueId;
	private String name;
//。。。
}


// 一个子类
@SuppressWarnings("serial")
@Entity
@Table(name="winterleague")
@PrimaryKeyJoinColumn(name="winterid")
public class WinterLeague extends League implements Serializable {

	private String winterInfo;
//。。。
}


// 执行代码示例
WinterLeague wl = new WinterLeague("wl1","1111111");
em.persist(wl);		
em.flush();				
		
List<WinterLeague> wlList = em.createQuery("select w from WinterLeague w").getResultList();
System.out.println("wl size="+wlList.size());

 

 

 

3,InheritanceType.TABLE_PER_CLASS

 

注意:一旦使用这种策略后主键生成策略就不能使用 AUTO  和 IDENTITY 了。

 

数据表图:

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    《EJB 3.0入门经典》 源码

    在"ejb3.0入门经典教程-source"这个压缩包中,包含了书中各个章节的示例代码,覆盖了EJB 3.0的各个方面,例如实体Bean的创建、会话Bean的使用、事务管理、安全性设置以及JPA的持久化操作等。这些源码对于初学者来说...

    EJB3.0API.rar_ejb_ejb3.0a_ejb3.0api

    2. **实体bean的POJO化(Plain Old Java Objects)**:EJB 3.0引入了基于Java Persistence API(JPA)的实体bean,允许使用普通的Java类作为数据库对象,无需继承特定的EJB基类或实现接口,提高了代码的可重用性。...

    EJB 3.0实例教程.pdf

    例如,`@Entity`用于标记实体bean,`@Stateless`和`@Stateful`用于标记无状态和有状态会话bean。 **2. 依赖注入(Dependency Injection,DI)** EJB 3.0引入了依赖注入的概念,允许容器负责bean之间的依赖关系管理...

    EJB3.0开发文档

    在EJB3.0中,实体Bean不再需要编写复杂的Home接口和Remote接口,而是通过注解(Annotations)直接在Java类上定义。JPA(Java Persistence API)成为默认的持久化机制,使得数据模型可以直接映射到数据库表,这大大...

    Entity-EJB3.0.rar_EJB3.0

    在这个"Entity-EJB3.0.rar"压缩包中,我们很可能找到了关于EJB 3.0实体Bean(Entity Beans)的示例代码和相关文档。 EJB 3.0引入了以下几个关键特性: 1. **注解驱动**:在EJB 3.0中,开发者可以使用Java注解...

    EJB3.0实体的注解规范

    总的来说,EJB3.0实体的注解规范极大地简化了Java EE应用中实体Bean的配置,通过注解能够方便地定义对象-关系映射,同时允许开发者利用Hibernate的扩展功能来满足更复杂的数据库需求。在实际开发中,理解并熟练掌握...

    JPA 批注参考 EJB3.0实体Bean注解详细解析

    ### Java Persistence API (JPA) 与 EJB 3.0 实体 Bean 注解详解 #### 一、JPA 概述与实体 Bean 的转变 Java Persistence API (JPA) 是 Java 社区规范 JSR-220 的一部分,旨在提供一种标准的方式来处理对象与关系...

    精通EJB 3.0

    1. 注解驱动:EJB 3.0允许开发者通过注解来声明组件的元数据,如实体Bean的@Entity,会话Bean的@Stateless或@Stateful,以及服务接口的@Service等。这种方式避免了EJB 2.x中的XML配置文件,使得代码更加简洁明了。 ...

    EJB3.0中文文档

    实体Bean可以映射到数据库中的单个表,其中每个属性对应表中的一个字段。 **3.3 成员属性映射** 具体说明如何将实体Bean的属性映射到数据库表中的字段。 **3.4 建议重载实体BEAN的EQUALS()和HASHCODE()方法** ...

    ejb3.0src.rar_ejb

    2. **实体bean的简化**:EJB 3.0引入了Java Persistence API (JPA),实体bean可以直接继承自`javax.persistence.Entity`,并使用注解定义字段的持久化属性。例如,`@Id`表示主键,`@Column`定义列属性,`@ManyToOne`...

    ejb3.0的讲义一起看

    6. **实体bean(Entity Beans)**:EJB 3.0的实体bean与JPA结合,提供了透明的ORM功能,实体bean可以直接映射到数据库表,通过`@Entity`注解进行定义。 7. **消息驱动bean(Message-Driven Beans)**:MDBs用于处理...

    EJB3.0入门教程

    此外,EJB3.0引入了无状态会话Bean(Stateless Session Bean)和有状态会话Bean(Stateful Session Bean),以及实体Bean(Entity Bean)和消息驱动Bean(Message-Driven Bean)的概念,它们各自负责不同的业务逻辑...

    EJB3.0规范中英文版合集

    1. **实体Bean**:EJB 3.0引入了JPA(Java Persistence API),使得对象关系映射(ORM)更加直观。实体Bean不再需要实现特定接口,而是通过注解来标识和管理持久化状态。 2. **会话Bean**:会话Bean分为无状态和有...

    EJB3.0.PDF

    4. **支持继承与多态**:EJB3.0实体Bean现在能够支持继承和多态性,进一步促进了代码的复用与扩展性。 5. **灵活的查询语言与SQL支持**:EJB3.0引入了更加灵活丰富的查询语言,同时保留了对SQL的支持,为开发者提供...

    EJB 3.0实例教程

    本教程将通过实例深入讲解EJB 3.0中的三大核心组件:Session Bean、Entity Bean和Message Driven Bean。 ### Session Bean Session Beans是EJB中的一个关键概念,它们代表了业务逻辑层的服务,提供对应用程序的...

    ejb3.0实例教程.rar

    在"ejb3.0实例教程"中,你可能会学习到如何创建和配置EJB组件,包括实体Bean、会话Bean以及消息驱动Bean(Message-Driven Bean)。教程可能涵盖以下步骤: 1. 配置开发环境,比如安装JDK、设置EJB容器(如Glassfish...

    EJB3.0的学习文档

    - **无容器依赖的实体Bean**:EJB3.0的实体Bean可以作为POJO(Plain Old Java Object)存在,不再强制需要继承特定的基类或实现接口。 - **自动事务管理**:EJB3.0 提供了更强大的事务管理,开发者无需手动处理事务...

    EJB3.0学习心得

    - **实体 Bean**: 在 EJB 3.0 中,实体 Bean 被替换成了 JPA (Java Persistence API),这是一个更为灵活的对象关系映射 (ORM) 解决方案。 - **查询语言**: EJB 3.0 引入了 EJB-QL 和 JPA 的 JPQL,支持更为丰富的...

    ejb3.0入门图文教程

    2. EJB 3.0包括三种主要组件:实体Bean(Entity Beans)、会话Bean(Session Beans)和消息驱动Bean(Message-Driven Beans)。 二、实体Bean 1. 实体Bean代表持久化数据,对应数据库中的记录。EJB 3.0引入了Java ...

Global site tag (gtag.js) - Google Analytics