back to top

Data Access – Creare un ORM Layer utilizzando Hibernate e JPA – Guida Java Spring

Vediamo ora come creare un ORM layer usando Hibernate 3 e JPA 2 (per la corretta comprensione di questa lezione, si suppone che il lettore abbia delle conoscenze di base riguardanti i data source e il funzionamento di Hibernate e JPA).

Supponiamo di avere un DB MySql installato sulla nostra macchina; per prima cosa definiamo nel nostro applicationContext.xml un data source che si collega al nostro db:

<!-- DATA SOURCE -->
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost:3306/mrweb" />
  <property name="username" value="mrweb" />
  <property name="password" value="s3cret" />
</bean>

Una volta creato il data source creaiamo una persistence unit per JPA situata nel file META-INF/persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence  xmlns="http://java.sun.com/xml/ns/persistence"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
  version="2.0">
<persistence-unit name="pu"  transaction-type="RESOURCE_LOCAL" />
</persistence>

A questo punto siamo pronti per integrare Hibernate e JPA insieme:

<!-- JPA E HIBERNATE -->
<bean id="jpaVendorAdapter"class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  <property name="database" value="MYSQL" />
  <property name="showSql" value="true" />
  <property name="generateDdl" value="true" />
</bean>

Fatto questo creaimo il nostro EntityManagerFactory che ci consentirà di iniettare nei nostri DAO l'EntityManger:

<!-- ENTITY MANAGER FACTORY -->
<bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="myDataSource" />
  <property name="persistenceUnitName" value="pu" />
  <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
</bean>

Creaiamo ora una Entity di esempio Car:

package it.mrwebmaster.hibernate;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.PersistenceUnit;

@Entity
@PersistenceUnit(unitName="pu")
public class Car {

  @Override
  public String toString() {
    return "Car [id=" + id + ", name=" + name + ", year=" + year + "]";
  }

  @Id
  @GeneratedValue
  private Integer id;

  @Column
  private String name;

  @Column
  private Date year;

  public Integer getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  public Date getYear() {
    return year;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public void setName(String name) {
    this.name = name;
  }

  public void setYear(Date year) {
    this.year = year;
  }
}

La nostra Entity ha solo tre colonne: Id, Name e Year, dove la colonna Id sarà la nostra Primary Key che verrà generata automaticamente da Hibernate. Avendo specificato nella nostra configurazione il parametro "ddl=true", Hibernate provvederà ad aggiornare le tabelle nel nostro DB in maniera automatica. L' uso della annotation @PersistenceUnit insieme a questa riga di configurazione nell'applicationContext.xml:

<!-- JPA ANNOTATION -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

consente di evitare di specificare, all'interno della Persistence Unit, l'elenco delle entity della nostra applicazione.

Pubblicitร