I tienen esta claseCómo utilizar @Formula (en Hibernate) para referirse al mismo objeto (actual)
@Entity
@Table(name = "DB.APPL_SESSION")
@AttributeOverrides({@AttributeOverride(name = "id", column = @Column(name = "APPL_SESSION_ID"))})
@SequenceGenerator(name = "TableSequence", sequenceName = "DB.APPL_SESSION_SQ")
public class AiSession{
@Formula("(select sum(nvl(budg.AMT_OV,budg.AMT)) from DB.BUDGET budg where budg.APPL_SESSION_ID = APPL_SESSION_ID)")
private LocalDate realSessionStartDate;
En la fórmula anterior que estaba trabajando con objeto DB.BUDGET y con la corriente de ID de objeto (APPL_SESSION_ID). Pero ahora quería sólo para trabajar con la siguiente variable miembro (StartDate), que está en la clase AidApplicantYearSession
@Basic
@Temporal(TemporalType.DATE)
@Column(name = "START_OV_DT")
private Date overrideStartDate;
¿Cómo debería escribir una fórmula que se parece a la anterior, pero utiliza sólo en la variable de miembro del objeto? Se me ocurrió con
@Formula("(select START_OV_DT from DB.APPL_SESSION)")
¿Es esa la forma correcta? La lógica para las dos fórmulas es totalmente diferente.
Gracias por su respuesta. En la documentación, dice "A veces, quiere que la base de datos haga algunos cálculos para usted en lugar de hacerlo en la JVM". ¿Cuál es más eficiente (haciendo el cálculo en la JVM o dejando que la Base de Datos realice algún cálculo) si se trata de una fórmula más compleja? – WowBow
Olvidé mencionar que también debería usar la función NVL. Así es como lo hice @Formula ("(seleccione NVL (START_OV_DT, START_DT)") ¿Omitir la selección será lo mismo que guardarla? – WowBow
@MatX: no creo que tenga sentido usar '@ Formula' para cálculos que pueden hacerse fácilmente en el lado de la aplicación. Sí, debería estar bien para múltiples campos. – axtavt