行レベルの検証は、複数の属性を同時に検証する必要がある場合に便利です。この種類の検証は、EntityImpl.validateEntity()をオーバーライドすることで、エンティティ・レベルで実装します。
validateEntity()は、エンティティ・オブジェクトのインスタンスの選択が解除される(クライアントが特定の行の参照を終了する)、またはクライアントがトランザクションをコミットしようとするたびにコールされます。validateEntity()が例外をスローする場合は、エラーが修正されるまで、エンティティ・オブジェクトの選択は解除されません。
行レベルの検証を実装するには、次のようにします。
たとえば、人事管理アプリケーションの場合、Employee
エンティティ・オブジェクトは、DateHired
属性とYearsOfService
属性間の関係が有効な場合にのみ有効です。検証規則により、他のエンティティからの値も評価できます。次のコード例では、マスター/ディテール・アソシエーションで結合されたEmp
エンティティ・オブジェクトとDept
エンティティ・オブジェクトからの値を評価します。
public void validateEntity() {
super.validateEntity();
// Custom validation follows:
// Employees in ACCOUNTING cannot have Salary > 1500.
if (this.getDept().getDname().equals("ACCOUNTING") &&
(this.getSal().compareTo(1500) > 0) {
throw new JboException("Salary too high for ACCOUNTING.");
}
}
Copyright © 1997, 2004, Oracle. All rights reserved.