openxava / documentación
/ Lección 17: Lógica desde la base de datos
Curso:
1.
Primeros pasos |
2.
Modelo básico del dominio (1) |
3.
Modelo básico del dominio (2) |
4.
Refinar la interfaz de usuario |
5.
Desarrollo ágil |
6.
Herencia de superclases mapeadas |
7.
Herencia de entidades |
8.
Herencia de vistas |
9.
Propiedades Java |
10.
Propiedades calculadas |
11.
@DefaultValueCalculator en colecciones |
12.
@Calculation y totales de colección |
13.
@DefaultValueCalculator desde archivo |
14.
Evolución del esquema manual |
15. Cálculo del
valor por defecto multiusuario |
16.
Sincronizar propiedades persistentes y calculadas |
17.
Lógica desde la base de datos |
18.
Validación avanzada |
19.
Refinar el comportamiento predefinido |
20.
Comportamiento y lógica de negocio |
21.
Referencias y colecciones |
A.
Arquitectura y filosofía |
B.
Java Persistence API |
C.
Anotaciones |
D.
Pruebas automáticas
Hemos aprendido cómo podemos sincronizar propiedades persistentes y
calculadas, utilizando la anotación
@Calculation y
@DefaultValueCalculator, así como podemos definir lógica para
ambientes multiusuario. Veremos ahora otro método para definir lógica de
negocio, esta vez desde la base de datos.
Si no te gustan los videos sigue las instrucciones a continuación.
Otra alternativa a
@Calculation, o a tener propiedades calculadas
y persistentes sincronizadas, es la anotación
@Formula.
@Formula
es una extensión de Hibernate al estándar JPA, que permite mapear una
propiedad a un fragmento de SQL. Por ejemplo, puedes definir
beneficioEstimado
con
@Formula en
DocumentoComercial como se muestra en el
siguiente código:
@org.hibernate.annotations.Formula("IMPORTETOTAL * 0.10") // El cálculo usando SQL
@Setter(AccessLevel.NONE) // El setter no se genera, sólo necesitamos el getter
@Stereotype("DINERO")
BigDecimal beneficioEstimado; // Un campo, como con una propiedad persistente
Esto significa que cuando un
DocumentoComercial se lea
de la base de datos, el campo
beneficioEstimado se rellenerá con
el cálculo de
@Formula que es ejecutado por la base de datos. El
usuario puede filtrar y ordenar por las propiedades
@Formula en
modo lista, pero siempre son de solo lectura y no se recalculan en tiempo
real en modo detalle. Dado que son de sólo lectura no necesitan el método
setter, por lo que la hemos anotamos con
@Setter(AccessLevel.NONE)
para que Lombok no genere el setter. Además, las propiedades
@Formula
dependen de la base de datos, porque podrías usar sintaxis sólo soportada
por cierto fabricante de base de datos.
Resumen
En esta lección has aprendido algunas formas comunes de añadir lógica de
negocio a tus entidades. No hay duda sobre la utilidad de las propiedades
calculadas,
@Calculation, los métodos de retrollamada o
@Formula.
Sin embargo, todavía tenemos muchas otras formas de añadir lógica a tu
aplicación OpenXava, que vamos a aprender a usar.
En futuros lecciones verás como añadir validación, modificar el
funcionamiento estándar del módulo y añadir tu propia lógica de negocio,
entre otras formas de añadir lógica personalizada a tu aplicación.
Descargar código fuente de esta lección
¿Problemas con la lección? Pregunta en el foro ¿Ha ido bien?
Ve a la lección 18