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 @Formula(value="msgQuantity*2") private int maxId; // call functions @Formula(value = "MOD(msgQuantity,2)") private int sqrt;
Sample Code :-
ChatMassage.java
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.javastoreroom.modal; import java.io.Serializable; 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 */ @Entity @Table(name = "messages") public class ChatMassage implements Serializable { /** * */ private static final long serialVersionUID = 1L; @Id @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; @Formula(value="msgQuantity*2") 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; } }
Main.java
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) viewMassage(criteria); } catch (HibernateException e) { e.printStackTrace(); } finally { session.close(); } } @SuppressWarnings("unchecked") private static void viewMassage(Criteria criteria) { ListchatMassages = criteria.list(); for (ChatMassage chatMassage : chatMassages){ System.out.println(chatMassage.getMessage()); System.out.println(chatMassage.getSqrt()); System.out.println(chatMassage.getMaxId()); } } }
While execute code see below query :-
select this_.msg_id as msg1_0_0_, this_.message as message0_0_, this_.msgQuantity as msgQuant3_0_0_, this_.msgQuantity*2 as formula0_0_, MOD(this_.msgQuantity, 2) as formula1_0_ from messages this_
That's done :)
No comments:
Post a Comment