在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 了。
数据表图:
分享到:
相关推荐
在"ejb3.0入门经典教程-source"这个压缩包中,包含了书中各个章节的示例代码,覆盖了EJB 3.0的各个方面,例如实体Bean的创建、会话Bean的使用、事务管理、安全性设置以及JPA的持久化操作等。这些源码对于初学者来说...
2. **实体bean的POJO化(Plain Old Java Objects)**:EJB 3.0引入了基于Java Persistence API(JPA)的实体bean,允许使用普通的Java类作为数据库对象,无需继承特定的EJB基类或实现接口,提高了代码的可重用性。...
例如,`@Entity`用于标记实体bean,`@Stateless`和`@Stateful`用于标记无状态和有状态会话bean。 **2. 依赖注入(Dependency Injection,DI)** EJB 3.0引入了依赖注入的概念,允许容器负责bean之间的依赖关系管理...
在EJB3.0中,实体Bean不再需要编写复杂的Home接口和Remote接口,而是通过注解(Annotations)直接在Java类上定义。JPA(Java Persistence API)成为默认的持久化机制,使得数据模型可以直接映射到数据库表,这大大...
在这个"Entity-EJB3.0.rar"压缩包中,我们很可能找到了关于EJB 3.0实体Bean(Entity Beans)的示例代码和相关文档。 EJB 3.0引入了以下几个关键特性: 1. **注解驱动**:在EJB 3.0中,开发者可以使用Java注解...
总的来说,EJB3.0实体的注解规范极大地简化了Java EE应用中实体Bean的配置,通过注解能够方便地定义对象-关系映射,同时允许开发者利用Hibernate的扩展功能来满足更复杂的数据库需求。在实际开发中,理解并熟练掌握...
### Java Persistence API (JPA) 与 EJB 3.0 实体 Bean 注解详解 #### 一、JPA 概述与实体 Bean 的转变 Java Persistence API (JPA) 是 Java 社区规范 JSR-220 的一部分,旨在提供一种标准的方式来处理对象与关系...
1. 注解驱动:EJB 3.0允许开发者通过注解来声明组件的元数据,如实体Bean的@Entity,会话Bean的@Stateless或@Stateful,以及服务接口的@Service等。这种方式避免了EJB 2.x中的XML配置文件,使得代码更加简洁明了。 ...
实体Bean可以映射到数据库中的单个表,其中每个属性对应表中的一个字段。 **3.3 成员属性映射** 具体说明如何将实体Bean的属性映射到数据库表中的字段。 **3.4 建议重载实体BEAN的EQUALS()和HASHCODE()方法** ...
2. **实体bean的简化**:EJB 3.0引入了Java Persistence API (JPA),实体bean可以直接继承自`javax.persistence.Entity`,并使用注解定义字段的持久化属性。例如,`@Id`表示主键,`@Column`定义列属性,`@ManyToOne`...
6. **实体bean(Entity Beans)**:EJB 3.0的实体bean与JPA结合,提供了透明的ORM功能,实体bean可以直接映射到数据库表,通过`@Entity`注解进行定义。 7. **消息驱动bean(Message-Driven Beans)**:MDBs用于处理...
此外,EJB3.0引入了无状态会话Bean(Stateless Session Bean)和有状态会话Bean(Stateful Session Bean),以及实体Bean(Entity Bean)和消息驱动Bean(Message-Driven Bean)的概念,它们各自负责不同的业务逻辑...
1. **实体Bean**:EJB 3.0引入了JPA(Java Persistence API),使得对象关系映射(ORM)更加直观。实体Bean不再需要实现特定接口,而是通过注解来标识和管理持久化状态。 2. **会话Bean**:会话Bean分为无状态和有...
4. **支持继承与多态**:EJB3.0实体Bean现在能够支持继承和多态性,进一步促进了代码的复用与扩展性。 5. **灵活的查询语言与SQL支持**:EJB3.0引入了更加灵活丰富的查询语言,同时保留了对SQL的支持,为开发者提供...
本教程将通过实例深入讲解EJB 3.0中的三大核心组件:Session Bean、Entity Bean和Message Driven Bean。 ### Session Bean Session Beans是EJB中的一个关键概念,它们代表了业务逻辑层的服务,提供对应用程序的...
在"ejb3.0实例教程"中,你可能会学习到如何创建和配置EJB组件,包括实体Bean、会话Bean以及消息驱动Bean(Message-Driven Bean)。教程可能涵盖以下步骤: 1. 配置开发环境,比如安装JDK、设置EJB容器(如Glassfish...
- **无容器依赖的实体Bean**:EJB3.0的实体Bean可以作为POJO(Plain Old Java Object)存在,不再强制需要继承特定的基类或实现接口。 - **自动事务管理**:EJB3.0 提供了更强大的事务管理,开发者无需手动处理事务...
- **实体 Bean**: 在 EJB 3.0 中,实体 Bean 被替换成了 JPA (Java Persistence API),这是一个更为灵活的对象关系映射 (ORM) 解决方案。 - **查询语言**: EJB 3.0 引入了 EJB-QL 和 JPA 的 JPQL,支持更为丰富的...
2. EJB 3.0包括三种主要组件:实体Bean(Entity Beans)、会话Bean(Session Beans)和消息驱动Bean(Message-Driven Beans)。 二、实体Bean 1. 实体Bean代表持久化数据,对应数据库中的记录。EJB 3.0引入了Java ...