This example presents the basic concept of translating data access exceptions in Spring.
The technologies used are :
-
– Spring 4.3.18
– H2 1.3
– Lombok 1.18
– JDK 1.80
– Maven 3.3.9
You can convert this example to an Eclipse IDE project by going to folder where is the pom.xml is, and use the command :
mvn eclipse:eclipse |
Inspired from « Beginning Spring » Mert Caliskan, Kenan Sevindik, Rod Johnson (Foreword by), Jürgen Höller (Foreword by).
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion >4.0.0</ modelVersion > < groupId >javaspringexamples.springJPA</ groupId > < artifactId >springJPAExceptionTranslating</ artifactId > < version >0.0.1-SNAPSHOT</ version > < packaging >jar</ packaging > < properties > < maven.compiler.source >1.8</ maven.compiler.source > < maven.compiler.target >1.8</ maven.compiler.target > </ properties > < dependencies > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-orm</ artifactId > < version >4.3.18.RELEASE</ version > </ dependency > < dependency > < groupId >org.springframework</ groupId > < artifactId >spring-context</ artifactId > < version >4.3.18.RELEASE</ version > </ dependency > < dependency > < groupId >org.hibernate</ groupId > < artifactId >hibernate-core</ artifactId > < version >4.3.1.Final</ version > </ dependency > < dependency > < groupId >org.hibernate</ groupId > < artifactId >hibernate-entitymanager</ artifactId > < version >4.3.1.Final</ version > </ dependency > < dependency > < groupId >com.h2database</ groupId > < artifactId >h2</ artifactId > < version >1.3.175</ version > </ dependency > </ dependencies > </ project > |
package javaspringexamples.springJPA.ExceptionTranslating; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import org.hibernate.jpa.HibernatePersistenceProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; /** * * @author mounir.sahrani@gmail.com * */ @Configuration public class Conf { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName( "org.h2.Driver" ); dataSource.setUrl( "jdbc:h2:tcp://localhost/~/javaspringexamples" ); dataSource.setUsername( "sa" ); dataSource.setPassword( "" ); return dataSource; } private Map<String, ?> jpaProperties() { Map<String, String> jpaPropertiesMap = new HashMap<String, String>(); jpaPropertiesMap.put( "hibernate.dialect" , "org.hibernate.dialect.H2Dialect" ); jpaPropertiesMap.put( "hibernate.hbm2ddl.auto" , "update" ); return jpaPropertiesMap; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); factoryBean.setPersistenceProviderClass(HibernatePersistenceProvider. class ); factoryBean.setDataSource(dataSource()); factoryBean.setPackagesToScan( "javaspringexamples.springJPA.ExceptionTranslating" ); factoryBean.setJpaPropertyMap(jpaProperties()); return factoryBean; } @Bean public PersonDAO personDao() { PersonDAOImpl dao = new PersonDAOImpl(); return dao; } @Bean public static PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() { PersistenceExceptionTranslationPostProcessor bean = new PersistenceExceptionTranslationPostProcessor(); return bean; } } |
package javaspringexamples.springJPA.ExceptionTranslating; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.dao.DataAccessException; /** * * @author mounir.sahrani@gmail.com * */ public class Main { public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Conf. class ); PersonDAO dao = (PersonDAO) applicationContext.getBean( "personDao" ); // Creating person object Person person = new Person(); person.setFirstName( null ); person.setLastName( "KOLOBANE" ); // Spring handles different types of data access exceptions thrown from the data // access layer, and translates them into // org.springframework.dao.DataAccessException. try { // Saving person dao.save(person); } catch (DataAccessException dae) { System.out.println( "Exception translated by Spring and handled" ); } } } |
package javaspringexamples.springJPA.ExceptionTranslating; import javax.persistence.Basic; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * * @author mounir.sahrani@gmail.com * */ @Entity public class Person { @Id @GeneratedValue private Long id; @Basic (optional= false ) private String firstName; private String lastName; public Long getId() { return id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this .firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this .lastName = lastName; } } |
package javaspringexamples.springJPA.ExceptionTranslating; /** * * @author mounir.sahrani@gmail.com * */ public interface PersonDAO { public void save(Person p); } |
package javaspringexamples.springJPA.ExceptionTranslating; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.PersistenceUnit; import org.springframework.stereotype.Repository; /** * * @author mounir.sahrani@gmail.com * */ @Repository public class PersonDAOImpl implements PersonDAO { @PersistenceUnit private EntityManagerFactory emf; public void save(Person p) { EntityManager em = emf.createEntityManager(); EntityTransaction transaction = em.getTransaction(); transaction.begin(); em.persist(p); transaction.commit(); em.close(); } } |
Get the sources of the example from the following GitHub url