openxava / 文档 / 第十七章:从数据库中的逻辑

课程:1. 入门教学 | 2. 基本域模型(上) | 3. 基本域模型(下) | 4. 优化用户界面 | 5. 敏捷开发 | 6. 映射式超类继承 | 7. 实体继承 | 8. 视图继承(View) | 9. Java 属性 | 10. 计算属性 | 11. 用在集合的 @DefaultValueCalculator | 12. @Calculation 和集合总计 | 13. 从外部文件的 @DefaultValueCalculator | 14. 手动更改 schema | 15. 多用户时默认值的计算 | 16. 同步持久属性和计算属性 | 17. 从数据库中的逻辑 | 18. 使用 @EntityValidator 进行验证 | 19. 验证替代方案 | 20. 删除时验证 | 21. 自定义 Bean Validation 注解 | 22. 在验证中调用 REST 服务 | 23. 注解中的属性 | 24. 改进标准行为 | 25. 行为与业务逻辑 | 26. 参照与集合 | A. Architecture & philosophy | B. Java Persistence API | C. Annotations | D. Automated testing

目录

第十七章:从数据库中的逻辑
数据库逻辑(@Formula)
总结
我们已经学到如何使用 @Calculation 和 @DefaultValueCalculator 注解来同步持久和计算属性,以及如何为多用户环境定义逻辑。现在我们将用另一种定义业务逻辑的方法,这次从数据库。

数据库逻辑(@Formula)

@Calculation 或同步计算/持久属性的另一种替代方法是 @Formula 注解。 @Formula 是 JPA 标准的 Hibernate 扩展,它允许您将属性映射到 SQL 语句。例如,您可以在 CommercialDocument 中使用 @Formula 定义 estimatedProfit,如下:
@org.hibernate.annotations.Formula("TOTALAMOUNT * 0.10") // 使用 SQL 计算
@Setter(AccessLevel.NONE) // 只须 getter 所以不生成 setter
@Money
BigDecimal estimatedProfit; // 一个字段,像持久属性
这代表当从数据库中读取一个 CommercialDocument 时,estimatedProfit 字段将透过数据库由 @Formula 计算。用户可以在列表模式下通过 @Formula 的属性筛选或排序,不过它们始终是“只读”的,在详细信息模式下不会实时重新计算。由于它们是只读的,所以不需要 setter 方法,因此我们使用 @Setter(AccessLevel.NONE) 来防止 Lombok 生成 setter。此外,@Formula 的属性依赖数据库,因此您只能使用某些数据库支持的语法。

总结

在本章中,您学到了一些向实体添加业务逻辑的常用方法。如计算属性、@Calculation、回调方法或@Formula 的用处。但是我们还有许多为您 OpenXava 应用程序添加逻辑的方法,之后会学习如何使用。
在往后的课程中,您将看如何添加验证、修改模块的标准行为和添加您自己的业务逻辑,以及在应用程序添加自定义逻辑的其他方法。

下载本课源代码

对这节课有什么问题吗? 前往论譠 一切都顺利吗? 前往第十八章