From 380e14bff01bf55d1f7197ff8f0c233dcdfe339f Mon Sep 17 00:00:00 2001 From: eugenp Date: Mon, 12 Aug 2013 23:39:29 +0300 Subject: [PATCH] further persistence work --- .../cause1/persistence/model/Foo.java | 2 + .../cause3/persistence/model/Foo.java | 31 +++++++ .../spring/Cause3PersistenceConfig.java | 80 +++++++++++++++++++ ...Cause3MappingExceptionIntegrationTest.java | 30 +++++++ 4 files changed, 143 insertions(+) create mode 100644 spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause3/persistence/model/Foo.java create mode 100644 spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/spring/Cause3PersistenceConfig.java create mode 100644 spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionIntegrationTest.java diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause1/persistence/model/Foo.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause1/persistence/model/Foo.java index 001c14d6d6..e7db6747bc 100644 --- a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause1/persistence/model/Foo.java +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause1/persistence/model/Foo.java @@ -2,10 +2,12 @@ package org.baeldung.ex.mappingexception.cause1.persistence.model; import java.io.Serializable; +import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +@Entity public class Foo implements Serializable { @Id diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause3/persistence/model/Foo.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause3/persistence/model/Foo.java new file mode 100644 index 0000000000..243196786c --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause3/persistence/model/Foo.java @@ -0,0 +1,31 @@ +package org.baeldung.ex.mappingexception.cause3.persistence.model; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +public class Foo implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + + public Foo() { + super(); + } + + // API + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + +} diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/spring/Cause3PersistenceConfig.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/spring/Cause3PersistenceConfig.java new file mode 100644 index 0000000000..91755f9d6b --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/spring/Cause3PersistenceConfig.java @@ -0,0 +1,80 @@ +package org.baeldung.ex.mappingexception.spring; + +import java.util.Properties; + +import javax.sql.DataSource; + +import org.apache.tomcat.dbcp.dbcp.BasicDataSource; +import org.baeldung.ex.mappingexception.cause3.persistence.model.Foo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.orm.hibernate4.HibernateTransactionManager; +import org.springframework.orm.hibernate4.LocalSessionFactoryBean; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.google.common.base.Preconditions; + +@Configuration +@EnableTransactionManagement +@PropertySource({ "classpath:persistence-mysql.properties" }) +@ComponentScan({ "org.baeldung.ex.mappingexception.cause2.persistence" }) +public class Cause3PersistenceConfig { + + @Autowired + private Environment env; + + public Cause3PersistenceConfig() { + super(); + } + + @Bean + public LocalSessionFactoryBean sessionFactory() { + final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); + sessionFactory.setDataSource(restDataSource()); + sessionFactory.setAnnotatedClasses(new Class[] { Foo.class }); + sessionFactory.setHibernateProperties(hibernateProperties()); + + return sessionFactory; + } + + @Bean + public DataSource restDataSource() { + final BasicDataSource dataSource = new BasicDataSource(); + dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); + dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); + dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user"))); + dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass"))); + + return dataSource; + } + + @Bean + public HibernateTransactionManager transactionManager() { + final HibernateTransactionManager txManager = new HibernateTransactionManager(); + txManager.setSessionFactory(sessionFactory().getObject()); + + return txManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + final Properties hibernateProperties() { + return new Properties() { + { + setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); + setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); + + // setProperty("hibernate.globally_quoted_identifiers", "true"); + // note: necessary in launchpad-storage, but causing problems here + } + }; + } +} \ No newline at end of file diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionIntegrationTest.java new file mode 100644 index 0000000000..d6abe7db4f --- /dev/null +++ b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionIntegrationTest.java @@ -0,0 +1,30 @@ +package org.baeldung.ex.mappingexception; + +import org.baeldung.ex.mappingexception.cause3.persistence.model.Foo; +import org.baeldung.ex.mappingexception.spring.Cause3PersistenceConfig; +import org.hibernate.MappingException; +import org.hibernate.SessionFactory; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; +import org.springframework.transaction.annotation.Transactional; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { Cause3PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) +public class Cause3MappingExceptionIntegrationTest { + + @Autowired + private SessionFactory sessionFactory; + + // tests + + @Test(expected = MappingException.class) + @Transactional + public final void givenEntityIsPersisted_thenException() { + sessionFactory.getCurrentSession().saveOrUpdate(new Foo()); + } + +}