EntityBean关系

Entity Bean之间也可以进行继承。子类所创建的表自动拥有父类定义的一些字段。如果不想要该父类生成表,那就把它定义为abstract class。@Inheritance的strategy设为TABLE_PER_CLASS,这样每个子类就会有一个对应的表。也可以用SINGLE_TABLE来将所有子类的属性加到父类同一张表去,但是要用DiscriminatorType来区分。这里就不详细展开了。

 ......

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Order {

 @Id
 @Column(name="ORDER_ID")
 private int id;
 
 @Column(name="ORDER_NAME")
 private String name;
......

}

   

对于不同entity之间的关系,有

@OneToOne, @OneToMany, @ManyToOne, @ManyToMany 四种ejb3官方定义的映射关系。

两种映射方式:@JoinColumn  @JoinTable

下面详细介绍:

1. @OneToOne单向一对多关联


类Company.java

....... 

@Entity
public class Company {

 @Id
 private int compnayId;
 
 private String companyName;

  .......

}

 类StockOrder.java

....... 

@Entity
@Table(name="STOCK_ORDER")
public class StockOrder extends Order {

 @OneToOne
 private Company company;

.....

}

这里用@Table(name="xxx")来给该类创建的表定义一个名字,如果不加该annotation的话,默认创建出来的表名字就是类名。

创建出来的表:

STOCK_ORDER    

 ORDER_ID ORDER_NAME COMPANY_COMPANYID
可以看到,这里COMPNAY_COMPANYID就是Company.companyId的名字创建出来的,显然阅读上不是很好。这时可以在@OneToOne下面加上 @JoinColumn(name="COMPANY_ID") 将其名字改为COMPNAY_ID


2. @OneToMany

创建类Product.java

 @Entity
public class Product {

 @Id
 private int productId;
 
 private String productName;
 ......
}

 

一张SaleOrder应该包含一个或多个Product,即一对多关系。

SaleOrder.java

@Entity
@Table(name="SALE_ORDER")
public class SaleOrder extends Order{
 
 @OneToMany
 private List<Product> products = new LinkedList<Product>();

.....

}

a. 这种默认用法会创建单独一张表来存放SaleOrder和Product的关系,且名字默认为 SALE_ORDER_PRODUCT

 SALE_ORDER_ORDER_IDproducts_productId 

 

b. 如果我们在@OneToMany下面加上@JoinColumn的annotation的话,那么这张 SALE_ORDER_PRODUCT的表就不会创建!

而是在Many的那一端——Product的表中加上一个Column来存放SaleOrder的Id。这个地方跟@OneToOne就不同了,@OneToOne是在加入@JoinColumn的类所生成的表里加入column,而@OneToMany默认是在Many的那一端。因为既然是要对应成一个column,多值显然不行。

c. 对于a中的默认行为,我们也可以用显式的方式来定义,即加上@JoinTable。这里举例为

@JoinTable(name="SALE_ORDER_PRODUCT", joinColumns={@JoinColumn(name="ORDER_ID")},inverseJoinColumns=@JoinColumn(name="PRODUCT_ID"))

 那么生成的表明就为SALE_ORDER_PRODUCT,表结构就是

 ORDER_IDPRODUCT_ID 
   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值