`

一个实体映射多张表

阅读更多
场景:
遇上一个不确定的变更需求,这个需求其实挺简单,对一个表新增若干个字段,并且修改页面结构。因为需求属于不确定带实验性质的,所以在开发过程中不能破坏原有功能的正常工作,开发完成后还可以替换原有功能。
思路:
这个实现比较简单,只有新增字段,没有删除字段,所以在开过中,我采用了扩展表的方式实现变更需求,这个不会破坏原有表结构,且还是采用原有的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项目(hibernate_first) 2 测试实体对象的生命周期(hibernate_session) 3 hibernate基本映射(hibernate_basemapping) 4 class实体类---表 4 标签id 5 主键生成器Generator 6 多对一, 一对一, 一...

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

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

    EJB 3.0开发指南之多表映射

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

    Hibernate3.1_学习源码

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

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

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

    nmg:现有数据库表中的NHibernate映射生成器

    NHibernate映射生成器一个简单的实用程序,用于从现有数据库表中生成NHibernate映射文件和相应的域类。 特征: 支持Oracle,SqlServer,PostgreSQL,MySQL,SQLite,Sybase,Ingres,CUBRID 可以生成hbm.xml,Fluent...

    Mapper sql语句字段和实体类属性名字有什么关系

    1.在数据库中有一个通知表 可以看到其中的 gmt_create、 notifier_name、 outer_title 这三个字段是有下划线的 2.这张表对应的实体类为 public class Notification { private Long id; private Long ...

    数据库权限设计与实现.doc

    如下图: 这三个表之间的关系是多对多的,一个权限可能同时属于多个管理组,一个管理组 中也可能同时包含多个权限。同样的道理,一个人员可能同时属于多个管理组,而一个 管理组中也可能同时包含多个人员。如下图: ...

    java用户角色权限设计.doc

    如下图: 这三个表之间的关系是多对多的,一个权限可能同时属于多个管理组,一个管理组中也可 能同时包含多个权限.同样的道理,一个人员可能同时属于多个管理组,而一个管理组中也 可能同时包含多个人员.如下图: 由于这...

    管理员-数据库设计.doc

    如 " "下图: " " " " 这三个表之间的关系是多对多的,一个权限可能同时属于多个管理组 " ",一个管理组中也可能同时包含多个权限。同样的道理,一个人员可能同 " "时属于多个管理组,而一个管理组中也可能同时包含...

    EasyCode代码生成插件.rar

    其实旧版微人事当时没有使用逆向工程,是我自己手动敲出来的,当然手动敲的工作量...支持同时生成生成多张表的代码,张表有独立的配置信息,完全的个性化定义,规则由你设置。 我自己也稍微体验了一把,还是蛮方便的。

    Oracle数据库Sql语句详解大全

    在一张或多张表中使用等值或非等值连接 使用外连接查询 自连接查询 第五章 组函数 定义及有效的使用组函数 使用Group By对查询数据分组 使用HAVING子句对分组后的数据进行过滤 第六章 子查询 第七章 数据建模及...

    如何设计数据库.doc

    发 贴表和跟贴表中的"TID"列 在表之间建立主外键,体现实体之间的映射关系 这里我们绘制ER图可以使用微软的Word或VISIO以及Sybase公司的PowerDesigner,它 主要用于和客户沟通交流意见,并反复修改,直到客户确认。...

    CMEU代码生成器

    生成Mapper映射文件(dao层接口SQL语句,支持生成3表关联(比如:A表关联B表,B表关联C表,一次便可获得3张表的数据),支持主键策略;<如果选择创建Assist支持分页,去重,排序,无注入动态查询等>); 生成service层接口(与dao...

    MongoDb数据结构详解.pdf

    在关系型数据库中,关系数据库的每⼀张表就是⼀个关系模型的映射,每张表的字段就是对应的实体的属性和主外键的集合,每个字段需要 提前定义。 Document:这⾥的user集合("表")有⼀个document(document可以理解...

    数据库资料

    表中包含大量的冗余,可能会导致数据异常:更新异常 例如,修改职工号=1001的职务,则必须修改所有职工号=1001的行添加异常 若要增加一个新的职工时,首先必须给这名职工分配一个工程。或者为了添加一名新职工的数据...

    数据库原理及应用实验(共6个).zip

    1、创建一个名为XSCJ的数据库,其初始大小为5MB,最大大小10MB,允许数据库自动增长,增长方式是按10%比例增长;日志文件初始为2MB,最大可增长到5MB,按1MB增长。 2、将以上XSCJ数据库的主数据文件的最大大小改为不...

Global site tag (gtag.js) - Google Analytics