场景:
遇上一个不确定的变更需求,这个需求其实挺简单,对一个表新增若干个字段,并且修改页面结构。因为需求属于不确定带实验性质的,所以在开发过程中不能破坏原有功能的正常工作,开发完成后还可以替换原有功能。
思路:
这个实现比较简单,只有新增字段,没有删除字段,所以在开过中,我采用了扩展表的方式实现变更需求,这个不会破坏原有表结构,且还是采用原有的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中,我们通过`@OneToMany`注解来实现这种关系。这个注解通常放在拥有众多子项的一方,配置`mappedBy`属性来指定子项在...
在IT行业中,SSH(Struts2、Spring、Hibernate)是一个常用的Java Web开发框架组合,它由Struts2作为MVC框架、Spring作为依赖注入容器和事务管理器、Hibernate作为对象关系映射工具组成。这个“六张表SSH操作”资料...
sheng.ADO.NET.Plus请访问原版代码库,以获得最新更新: MIT 协议开源,...支持一对多的映射关系,即一个实体类可以映射到多张表。支持自动填充/补全数据实体类中的数据。支持DataSet、DataTable、DataRow多种粒度的内
- **TableSplitting**:表拆分,一个实体可能映射到数据库中的多张表。 通过这个项目,开发者可以深入理解如何在EF中处理各种关系,以及如何利用不同的映射策略优化数据库交互。这不仅有助于提高开发效率,还能...
在一对多外键单向关联中,一个实体(父实体)与多个实体(子实体)相关联,这种关联通过在子实体中添加一个指向父实体的外键来实现。 **表结构示例**: - **Department表**: - `departmentid`: 主键 - `...
- **多对一关联映射**:一个实体可以属于多个实体之一,例如,一个学生可以属于多个班级中的一个。 - **一对一关联映射**: - **主键关联映射**:通过主键来关联两个实体。 - **唯一外键关联映射**:通过唯一...
事实上,一个实体Bean可以映射到多张表上。在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表。在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表...
这种策略通过在表中添加一个类型标识字段来区分不同类的实例。这个类型标识通常是一个枚举值或者整数,表示子类的类型。Hibernate通过这个标识字段来决定如何实例化正确的Java对象。 #### 类型标识字段 这个类型...
1. **配置实体类**:首先,你需要为每个类创建一个Java实体类,并使用`@Entity`注解标记它们。对于基类,可以使用`@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`来指定继承类型,但在这个情况下,不需要...
例如,我们可以使用`@Inheritance(strategy = InheritanceType.SINGLE_TABLE)`注解来定义一个类为继承的根,然后在子类上使用`@Entity`注解表明它们是数据库中的独立实体。同时,每个子类都需要有自己的主键,可以...
配置文件:只配置父类的映射文件,在其中加入joined-subclass将两个子类实体映射关系添加 2) 数据库表:一张表,包括公共字段、特有字段、区分字段 实体层设计:与第一种方法设计一样,设计三个实体类,分父类和...
多方对多方关联表示两个实体之间的关系是双向的,且一个实体可以与多个不同实体关联。例如,考虑一个在线商城系统,其中`Product`和`Category`之间的关系。一个产品可以属于多个类别,而一个类别也可以包含多个产品...
2. **多对一关系**:与一对多相反,多个员工对应一个部门。 3. **多对多关系**:比如项目与开发人员,两者之间可以有多个关联。映射通常通过中间表实现。 4. **一对一关系**:例如,用户与身份证一对一关系,可以...
- **单表继承** (`SINGLE_TABLE`): 所有子类共享同一张表,通过额外的一个字段来区分不同的子类。 - **每类一张表** (`TABLE_PER_CLASS`): 每个子类都有自己的表。 - **分类表继承** (`JOINED` 或 `TABLE_PER_...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作与对象模型进行无缝集成。这篇“深入浅出Hibernate”的帮助文档旨在提供全面的指导,帮助你理解和熟练运用Hibernate,无论你是初学者...
在描述中提到的"SSH简易增删改查",可能涉及到多个Action,每个对应一个CRUD操作。 Hibernate是ORM(Object-Relational Mapping)框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以使用对象而...
这种联系在数据库理论中是典型的1-N (一对多)关系,用户表某一用户对应N条电子邮件记录。 之前我们的用户表称为users,现在我们再建立一张被称为addresses的表用于存储电子邮件地址,通过Declarative系统,我们可以...