Welcome 微信登录

首页 / 软件开发 / JAVA / 使用JPA和Hibernate实现组合键

使用JPA和Hibernate实现组合键2011-01-28 IBM Stephen B. Morris问题定义

本技巧从问题的简单的描述开始:定义组合数据库键。这个键组合了多列,唯一地定义一个数据库表的行。有时,组合键也称为自然键 或业务键。某些时候使用组合键的原因是所选键在某些方面与最终用户的业务领域相关联。要定义组合键,只需从该领域中选择一些属性,并将其组合在一起,提供所需的行唯一性程度。组合键的缺点是设计和编码略有难度。此外,组合键倾向于将您的数据库和 ORM 设计绑定到原始领域。后者可能会成为严重的问题。

实体代码

清单 1 展示了一个名为 BillingAddress 的 Java 类。该类建模一名个人或一个组织的账单邮寄地址。账单本身与另一个名为 PurchaseOrder 的 Java 类关联。这里并没有什么出人意料之处 — 下置购买订单,接下来进行账单邮寄流程。

清单 1. BillingAddress 类

import javax.persistence.*;
import java.io.Serializable;

@Embeddable
public class BillingAddress implements Serializable {

private String street;
private String city;

BillingAddress() {}

public BillingAddress(String street, String city) {
this.street = street;
this.city = city;
}

public String getStreet() {
return street;
}

private void setStreet(String street) {
this.street = street;
}

public String getCity() {
return city;
}

private void setCity(String city) {
this.city = city;
}
}

这里有必要说明一个要点,该类实现了 Java Serializable 接口。另外还要注意带有注释 @Embeddable 的一行。此注释是组合键拼图中的第一块。带有 @Embeddable 注释的 Java 类本身可作为其他类的子组件。这听起来似乎有点复杂,而实际并非如此。作为演示,清单 2 展示了 PurchaseOrder 类,它使用清单 1 中的 BillingAddress 类。