WEB开发网
开发学院软件开发Java 持久化模式,第 2 部分: 提高代码重用和改进性能 阅读

持久化模式,第 2 部分: 提高代码重用和改进性能

 2010-04-02 00:00:00 来源:WEB开发网   
核心提示: 清单 3. 多态性查询Criteriacrit=session.createCriteria(PayRate.class);crit.add(Restictions.eq("jobRole","Programmer");...CriteriasalaryC

清单 3. 多态性查询

Criteria crit = session.createCriteria(PayRate.class); 
crit.add(Restictions.eq("jobRole", "Programmer"); 
... 
Criteria salaryCrit = session.createCriteria(SalaryPayRate.class); 
salaryCrit.add(Restrictions.eq("yearlyRate",50000.00)); 

有时候,实体的识别器不是简单的单一列。可能由多个列组成识别器的逻辑,逻辑也可能不是基本的当 A 列等于 X 时 逻辑。也可以定义一个公式来决定要创建的实例。例如,如果一列中的值是 null,就创建某个类的实例;如果这一列包含实际值,就创建不同的实例。这些类型的策略常常意味着数据模型应该重构,但是遗留数据模型可能无法进行重构。

利用多态性隐藏信息

使用 Hibernate 为模型中的实体选择行为是很不错,但是对于不同的实体常常还需要不同的数据集。如果一些字段对于某个子类有意义,但是对于其他子类没有意义,就可以把它们从超类中删除,并放到它们所属的子类中。这可以避免未来的代码维护者意外使用不属于当前实例的字段。

例如,为了计算小时制职员的工资,需要加班时间信息,而这一信息对于计算周薪制职员的工资是不必要的。加班工资对于周薪制职员没有意义,所以可以把它从 PayRate 类转移到 HourlyRate 类中。同样,yearlyRate 字段不属于 HourlyRate 类,可以转移到 SalaryRate 类中。

PayRate 类定义周薪制职员和小时制职员通用的字段,见清单 4:

清单 4. PayRate 类

public abstract class PayRate extends BaseDomainEntity{ 
 
public String getJobRole(){//...} 
 
@OneToMany(cascade = CascadeType.ALL) 
@OrderBy("payPeriodBeginDate") 
public List<PayCheck> getPayChecks(){//...} 
 
@OneToOne(cascade = CascadeType.ALL) 
public Employee getAssociatedEmployee(){//...} 
 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:持久化 模式 部分

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接