持久化模式,第 1 部分: 现代 ORM 工具的策略和最佳实践
2010-04-02 00:00:00 来源:WEB开发网通过使用 Java 5 注解,可以用类级注解在类源代码中直接嵌入数据库映射。Java Persistence API 为此定义了一套标准注解。Hibernate 和其他工具现在支持这些注解。可以通过 @MappedSuperclass 注解使用在基类中定义的映射。只要所有数据库表对通用字段采用相同的列类型和列名,那么只需在基类中编写映射一次,就可以在所有子类中重用。清单 1 是 BaseEntity 类的一个示例:
清单 1. 用 @MappedSuperclass 定义 BaseEntity
@MappedSuperclass
public class BaseEntity implements Identifiable{
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
清单 1 中的映射把 ID 字段映射到默认列名(id),并指定自动生成 ID(实现方式与数据库相关)。
注意,即使每个表使用不同的列名,仍然可能使用这些通用基字段。请考虑一种典型情况:所有数据库表的主键都是 Long 类型的,但是列名可能不一样。通过重新定义分配给特定子类的一个属性的列,仍然可以重用与 id 属性相关的代码。清单 2 演示如何重新定义与 id 属性相关联的列:
清单 2. 重新定义与 id 属性相关联的列
@Entity
@AttributeOverride( name="id", column = @Column(name="EMPLOYEE_ID") )
public class Employee extends BaseEntity {//...}
如果不使用 Hibernate 注解,也可以重用这些基类中的代码。但是,必须映射每个具体类的字段。Hibernate 会在 Java 代码中自动使用继承的字段。
更多精彩
赞助商链接