快速业务通道

eclipse + JBoss 5 + EJB3开发指南(11) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

eclipse + JBoss 5 + EJB3开发指南(11)

时间:2011-09-18 blogjava 哈佛校训

实体Bean的连接策略(JOINED Strategy)

在上一篇文章中,使用单表策略将一个表从逻辑上分成了多个表。但这样可能会造成空巢字段,也就 是说,一个逻辑表只由部分字段组成,而物理的表的很多字段的值就会为null。为了解决这个问题,可以 将t_accounts表物理地分成多个表。为了与t_accounts表进行对比,新建一个t_myaccounts表,结构如图 1所示。

图1  t_myaccounts表

从t_myaccounts的结构可以看出,在该表中只包含了t_accounts表的前三个字段,而后两个在逻辑上 分到了不同的表,因此,首先要建立两个物理表:t_checkingaccount和t_savingsaccount。这两个表的 结构如下:

图2  t_checkingaccount表

图3  t_savingsaccount表

eclipse + JBoss 5 + EJB3开发指南(11)(2)

时间:2011-09-18 blogjava 哈佛校训

在t_checkingaccount和t_savingsaccount表中都有一个account_id,这个account_id的值依赖于 t_myaccounts表中的account_id。

下面先来编写与t_myaccounts对应的实体Bean,代码如下:

package entity;

import javax.persistence.Column;

import javax.persistence.DiscriminatorColumn;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Inheritance;

import javax.persistence.InheritanceType;

import javax.persistence.Table;

@Entity

@Table(name="t_myaccounts")

@Inheritance(strategy=InheritanceType.JOINED)

public class Account

{

    protected String id; 

    protected float balance;

    protected String type;

    @Id

    @GeneratedValue(strategy=GenerationType.IDENTITY)

    @Column(name="account_id")

    public String getId()

    {

        return id;

    }

    public void setId(String id)

    {

        this.id = id;

    }

    public float getBalance()

    {

        return balance;

    }

    public void setBalance(float balance)

    {

        this.balance = balance;

    }

    @Column(name="account_type")

    public String getType()

    {

        return type;

    }

    public void setType(String type)

    {

        this.type = type;

    }

}

eclipse + JBoss 5 + EJB3开发指南(11)(3)

时间:2011-09-18 blogjava 哈佛校训

从上面的代码可以看出,只使用了@Inheritance对实体Bean进行注释。

下面编写MyCheckingAccount和MySavingsAccount类的代码:

MyCheckingAccount类的代码:

package entity;

import javax.persistence.Column;

import javax.persistence.DiscriminatorValue;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.PrimaryKeyJoinColumn;

import javax.persistence.Table;

@Entity

@Table(name="t_checkingaccount")

//  指定与Account类共享的主键名

@PrimaryKeyJoinColumn(name="account_id") 

public class MyCheckingAccount extends Account

{

    private double overdraftLimit;

    public MyCheckingAccount()

    {

      //  为account_type字段赋默认值

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号