一个实体映射多张表

场景:
遇上一个不确定的变更需求,这个需求其实挺简单,对一个表新增若干个字段,并且修改页面结构。因为需求属于不确定带实验性质的,所以在开发过程中不能破坏原有功能的正常工作,开发完成后还可以替换原有功能。
思路:
这个实现比较简单,只有新增字段,没有删除字段,所以在开过中,我采用了扩展表的方式实现变更需求,这个不会破坏原有表结构,且还是采用原有的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

猜你喜欢

转载自primitive123.iteye.com/blog/1946984