JPA Tutorial - JPA Column Precision Scale Example








When mapping Java float or double value to database table column, we can set the number type column precision scale.

The following code maps the float value to a database table column with precision 8 and scale 2.

@Column(precision=8, scale=2) 
private float hourlyRate;

Example

The following code is from Person.java.

package com.java2s.common;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="EMP")
public class Person {
  @Id
  private long id;
  
  @Column(unique=true, nullable=false) 
  private String name;
  private String surname;
  @Column(precision=8, scale=2) 
  private float hourlyRate;

  public Person() {}

  public Person(String name, String surname) {
    this.name = name;
    this.surname = surname;
  }

  public float getHourlyRate() {
    return hourlyRate;
  }

  public void setHourlyRate(float hourlyRate) {
    this.hourlyRate = hourlyRate;
  }

  public Long getId() {
    return id;
  }
  public void setId(Long id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getSurname() {
    return surname;
  }
  public void setSurname(String surname) {
    this.surname = surname;
  }

  @Override
  public String toString() {
    return "Person [id=" + id + ", name=" + name + ", surname=" + surname
        + ", hourlyRate=" + hourlyRate + "]";
  }


}

The following code is from PersonDaoImpl.java. It shows how to use the Person entity.

package com.java2s.common;


import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.transaction.annotation.Transactional;

@Transactional
public class PersonDaoImpl {
  public void test(){
    Person p1 = new Person("Tom", "Smith");
    p1.setId(1L);
    p1.setHourlyRate(3.12222F);
    Person p2 = new Person("Jack", "Kook");
    p2.setId(2L);
    p1.setHourlyRate(2222222223.12222F);
    
    save(p1);
    save(p2);

    listAll();
    
  }
  private void listAll(){
    List<Person> persons = getAll();
    for (Person person : persons) {
      System.out.println(person);
    }

  }
  @PersistenceContext
  private EntityManager em;
  
  
  public Long save(Person person) {
    em.persist(person);
    return person.getId();
  }
  
  public List<Person>getAll() {
    return em.createQuery("SELECT p FROM Person p", Person.class).getResultList();
  }
  
}

The following code is from App.java. It is the main class of the application.

package com.java2s.common;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {

  public static void main(String[] args) {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
        "applicationContext.xml");
    PersonDaoImpl dao = (PersonDaoImpl) context.getBean("personDao");

    dao.test();

    context.close();
    
    Helper.checkData();
  }
}


Download Column_Precision_Scale.zip

The code above generates the following result.

The following is the database dump.

Table Name: EMP
 Row:
    Column Name: ID,
    Column Type: BIGINT:
    Column Value: 1

    Column Name: HOURLYRATE,
    Column Type: DOUBLE:
    Column Value: 2.222222336E9

    Column Name: NAME,
    Column Type: VARCHAR:
    Column Value: Tom

    Column Name: SURNAME,
    Column Type: VARCHAR:
    Column Value: Smith

 Row:
    Column Name: ID,
    Column Type: BIGINT:
    Column Value: 2

    Column Name: HOURLYRATE,
    Column Type: DOUBLE:
    Column Value: 0.0

    Column Name: NAME,
    Column Type: VARCHAR:
    Column Value: Jack

    Column Name: SURNAME,
    Column Type: VARCHAR:
    Column Value: Kook