`

一个实体映射多张表

阅读更多
场景:
遇上一个不确定的变更需求,这个需求其实挺简单,对一个表新增若干个字段,并且修改页面结构。因为需求属于不确定带实验性质的,所以在开发过程中不能破坏原有功能的正常工作,开发完成后还可以替换原有功能。
思路:
这个实现比较简单,只有新增字段,没有删除字段,所以在开过中,我采用了扩展表的方式实现变更需求,这个不会破坏原有表结构,且还是采用原有的entity做开发。也就是用一个entity操作多张表而已。
实施1:
最初使用inheritance继承关系做多表操作,但是最后失败了,失败的原因是,原entity中带有OneToMany这种级联关系。主表加载原表的过程发生sql拼写异常错误,这个具体如果加载的暂时不清楚。
实施2:
之后,使用SecondaryTable注解,配置方式简单,先用@secondaryTable声明一个或者多张附加表,然后@column映射附表字段。之后就算完成了。通过一个实体操作多张表,完全感觉不出来的。替换原始能也变得简单了,只需将主表和附表合并到一张表,之后删掉@secondaryTable和column注解就可以了。后台代码完全不需要变动。
@Entity
    @Table(name="CUSTOMER")
    @SecondaryTable(name="CUST_DETAIL", 
        pkJoinColumns=@PrimaryKeyJoinColumn(name="CUST_ID"))
    public class Customer { ... } 

    Example 2: Single secondary table with multiple primary key columns.

    @Entity
    @Table(name="CUSTOMER")
    @SecondaryTable(name="CUST_DETAIL",
        pkJoinColumns={
            @PrimaryKeyJoinColumn(name="CUST_ID"),
            @PrimaryKeyJoinColumn(name="CUST_TYPE")})
    public class Customer { ... }

http://docs.oracle.com/javaee/5/api/index.html?javax/persistence/OneToOne.html
分享到:
评论

相关推荐

    hibernate关联映射实例

    在现实世界中,一个实体可能会与多个其他实体相关联,比如一个用户可以有多个订单。在Hibernate中,我们通过`@OneToMany`注解来实现这种关系。这个注解通常放在拥有众多子项的一方,配置`mappedBy`属性来指定子项在...

    六张表SSH操作,增删改查操作

    在IT行业中,SSH(Struts2、Spring、Hibernate)是一个常用的Java Web开发框架组合,它由Struts2作为MVC框架、Spring作为依赖注入容器和事务管理器、Hibernate作为对象关系映射工具组成。这个“六张表SSH操作”资料...

    sheng.ADO.NET.Plus:对原生 ADO.NET 的增强和辅助类,使其具备类似 ORM 操作的便利性,当从数据库中读取数据时,对内存中的 DataSet、DataTable、DataRow 进行动态映射。当向数据库写入数据时,根据操作的对象自动生成 SQL 语句并执行 ADO.NET 层面相应的操作

    sheng.ADO.NET.Plus请访问原版代码库,以获得最新更新: MIT 协议开源,...支持一对多的映射关系,即一个实体类可以映射到多张表。支持自动填充/补全数据实体类中的数据。支持DataSet、DataTable、DataRow多种粒度的内

    ado.net Entity Framework学习 CSEFEntityDataModel

    - **TableSplitting**:表拆分,一个实体可能映射到数据库中的多张表。 通过这个项目,开发者可以深入理解如何在EF中处理各种关系,以及如何利用不同的映射策略优化数据库交互。这不仅有助于提高开发效率,还能...

    Hibernate关联关系映射目录

    在一对多外键单向关联中,一个实体(父实体)与多个实体(子实体)相关联,这种关联通过在子实体中添加一个指向父实体的外键来实现。 **表结构示例**: - **Department表**: - `departmentid`: 主键 - `...

    hibernate学习笔记

    - **多对一关联映射**:一个实体可以属于多个实体之一,例如,一个学生可以属于多个班级中的一个。 - **一对一关联映射**: - **主键关联映射**:通过主键来关联两个实体。 - **唯一外键关联映射**:通过唯一...

    EJB 3.0开发指南之多表映射

    事实上,一个实体Bean可以映射到多张表上。在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表。在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表...

    Hibernate继承映射的第一种策略:每棵类继承树对应一张表

    这种策略通过在表中添加一个类型标识字段来区分不同类的实例。这个类型标识通常是一个枚举值或者整数,表示子类的类型。Hibernate通过这个标识字段来决定如何实例化正确的Java对象。 #### 类型标识字段 这个类型...

    hibernate映射继承关系(每个类都对应一张表)

    1. **配置实体类**:首先,你需要为每个类创建一个Java实体类,并使用`@Entity`注解标记它们。对于基类,可以使用`@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`来指定继承类型,但在这个情况下,不需要...

    Hibernate继承映射一:每个类分层结构一张表

    例如,我们可以使用`@Inheritance(strategy = InheritanceType.SINGLE_TABLE)`注解来定义一个类为继承的根,然后在子类上使用`@Entity`注解表明它们是数据库中的独立实体。同时,每个子类都需要有自己的主键,可以...

    Hibernate3.1_学习源码

    配置文件:只配置父类的映射文件,在其中加入joined-subclass将两个子类实体映射关系添加 2) 数据库表:一张表,包括公共字段、特有字段、区分字段 实体层设计:与第一种方法设计一样,设计三个实体类,分父类和...

    Hibernate_的简单教程

    多方对多方关联表示两个实体之间的关系是双向的,且一个实体可以与多个不同实体关联。例如,考虑一个在线商城系统,其中`Product`和`Category`之间的关系。一个产品可以属于多个类别,而一个类别也可以包含多个产品...

    hibernate配置文件以及类映射文件常用写法1

    2. **多对一关系**:与一对多相反,多个员工对应一个部门。 3. **多对多关系**:比如项目与开发人员,两者之间可以有多个关联。映射通常通过中间表实现。 4. **一对一关系**:例如,用户与身份证一对一关系,可以...

    JPA帮助文档.doc

    - **单表继承** (`SINGLE_TABLE`): 所有子类共享同一张表,通过额外的一个字段来区分不同的子类。 - **每类一张表** (`TABLE_PER_CLASS`): 每个子类都有自己的表。 - **分类表继承** (`JOINED` 或 `TABLE_PER_...

    hibernate帮助文档

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作与对象模型进行无缝集成。这篇“深入浅出Hibernate”的帮助文档旨在提供全面的指导,帮助你理解和熟练运用Hibernate,无论你是初学者...

    SSH增删改查2张表完整源码

    在描述中提到的"SSH简易增删改查",可能涉及到多个Action,每个对应一个CRUD操作。 Hibernate是ORM(Object-Relational Mapping)框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以使用对象而...

    研究Python的ORM框架中的SQLAlchemy库的映射关系

    这种联系在数据库理论中是典型的1-N (一对多)关系,用户表某一用户对应N条电子邮件记录。 之前我们的用户表称为users,现在我们再建立一张被称为addresses的表用于存储电子邮件地址,通过Declarative系统,我们可以...

Global site tag (gtag.js) - Google Analytics