Friday, 20 December 2013

Derived Property , computed property @Formula annotation in Hibernate

A derived, or calculated property when we want the Database to do some computation for you rather than in the JVM, we can create some kind of virtual column. We can use a SQL formula instead of mapping a property into a column.This kind of property is read only calculated at run time ,or fetch time.

To configure the derived property we use the @Formula annotation or formula attribute in xml.

// perform calculations
 private int maxId;
     // call functions
     @Formula(value = "MOD(msgQuantity,2)")
 private int sqrt;

Sample Code :-
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
package com.javastoreroom.modal;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Formula;

 * @author Arun
@Table(name = "messages")
public class ChatMassage implements Serializable {

 private static final long serialVersionUID = 1L;

 @GeneratedValue(strategy = GenerationType.AUTO)
 @Column(name = "msg_id")
 private int msg_id;

 @Column(name = "message")
 private String message;

 @Column(name = "msgQuantity")
 private int quantity;

 @Formula(value = "MOD(msgQuantity,2)")
 private int sqrt;

 private int maxId;
 public int getMsg_id() {
  return msg_id;

 public void setMsg_id(int msg_id) {
  this.msg_id = msg_id;

 public String getMessage() {
  return message;

 public void setMessage(String message) {
  this.message = message;

 public int getQuantity() {
  return quantity;

 public void setQuantity(int quantity) {
  this.quantity = quantity;

 public int getSqrt() {
  return sqrt;

 public void setSqrt(int sqrt) {
  this.sqrt = sqrt;

 public int getMaxId() {
  return maxId;

 public void setMaxId(int maxId) {
  this.maxId = maxId;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;

import com.javastoreroom.hibernateutil.HibernateUtil;
import com.javastoreroom.modal.ChatMassage;

public class Main {

 public static void main(String[] args) {
  Session session = HibernateUtil.getSessionFactory().openSession();

  try {
       Criteria criteria = session.createCriteria(ChatMassage.class);
   if (criteria.list().size() > 0)

  } catch (HibernateException e) {
  } finally {

 private static void viewMassage(Criteria criteria) {
  List chatMassages = criteria.list();
  for (ChatMassage chatMassage : chatMassages){ 


While execute code see below query :-

        this_.msg_id as msg1_0_0_,
        this_.message as message0_0_,
        this_.msgQuantity as msgQuant3_0_0_,
        this_.msgQuantity*2 as formula0_0_,
        2) as formula1_0_ 
        messages this_

That's done :)