From 5a1c890c10b3c3eaec8b42a7991a386a8e2f56b9 Mon Sep 17 00:00:00 2001 From: eugenp Date: Mon, 12 Aug 2013 23:18:22 +0300 Subject: [PATCH] persistence work --- .../cause2/persistence/dao/FooDao.java | 23 +++++ .../cause2/persistence/dao/IFooDao.java | 8 ++ .../cause2/persistence/model/Foo.java | 83 +++++++++++++++++++ .../persistence/service/FooService.java | 27 ++++++ .../persistence/service/IFooService.java | 8 ++ .../spring/Cause2PersistenceConfig.java | 79 ++++++++++++++++++ ...Cause2MappingExceptionIntegrationTest.java | 29 +++++++ 7 files changed, 257 insertions(+) create mode 100644 spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/dao/FooDao.java create mode 100644 spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/dao/IFooDao.java create mode 100644 spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/model/Foo.java create mode 100644 spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/service/FooService.java create mode 100644 spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/service/IFooService.java create mode 100644 spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/spring/Cause2PersistenceConfig.java create mode 100644 spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionIntegrationTest.java diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/dao/FooDao.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/dao/FooDao.java new file mode 100644 index 0000000000..4454c3f063 --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/dao/FooDao.java @@ -0,0 +1,23 @@ +package org.baeldung.ex.mappingexception.cause2.persistence.dao; + +import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo; +import org.baeldung.persistence.common.AbstractHibernateDao; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +@Repository +public class FooDao extends AbstractHibernateDao implements IFooDao { + + @Autowired + private SessionFactory sessionFactory; + + public FooDao() { + super(); + + setClazz(Foo.class); + } + + // API + +} diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/dao/IFooDao.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/dao/IFooDao.java new file mode 100644 index 0000000000..17e0822ed6 --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/dao/IFooDao.java @@ -0,0 +1,8 @@ +package org.baeldung.ex.mappingexception.cause2.persistence.dao; + +import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo; +import org.baeldung.persistence.common.IOperations; + +public interface IFooDao extends IOperations { + // +} diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/model/Foo.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/model/Foo.java new file mode 100644 index 0000000000..14f2b2af22 --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/model/Foo.java @@ -0,0 +1,83 @@ +package org.baeldung.ex.mappingexception.cause2.persistence.model; + +import java.io.Serializable; + +import javax.persistence.Column; +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; + + @Column(nullable = false) + private String name; + + public Foo() { + super(); + } + + public Foo(final String name) { + super(); + + this.name = name; + } + + // API + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + // + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Foo other = (Foo) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(); + builder.append("Foo [name=").append(name).append("]"); + return builder.toString(); + } + +} diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/service/FooService.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/service/FooService.java new file mode 100644 index 0000000000..609b503080 --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/service/FooService.java @@ -0,0 +1,27 @@ +package org.baeldung.ex.mappingexception.cause2.persistence.service; + +import org.baeldung.ex.mappingexception.cause2.persistence.dao.IFooDao; +import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo; +import org.baeldung.persistence.common.AbstractService; +import org.baeldung.persistence.common.IOperations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class FooService extends AbstractService implements IFooService { + + @Autowired + private IFooDao dao; + + public FooService() { + super(); + } + + // API + + @Override + protected IOperations getDao() { + return dao; + } + +} diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/service/IFooService.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/service/IFooService.java new file mode 100644 index 0000000000..b569dd2aa4 --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause2/persistence/service/IFooService.java @@ -0,0 +1,8 @@ +package org.baeldung.ex.mappingexception.cause2.persistence.service; + +import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo; +import org.baeldung.persistence.common.IOperations; + +public interface IFooService extends IOperations { + // +} diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/spring/Cause2PersistenceConfig.java b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/spring/Cause2PersistenceConfig.java new file mode 100644 index 0000000000..91226ea615 --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/spring/Cause2PersistenceConfig.java @@ -0,0 +1,79 @@ +package org.baeldung.ex.mappingexception.spring; + +import java.util.Properties; + +import javax.sql.DataSource; + +import org.apache.tomcat.dbcp.dbcp.BasicDataSource; +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 Cause2PersistenceConfig { + + @Autowired + private Environment env; + + public Cause2PersistenceConfig() { + super(); + } + + @Bean + public LocalSessionFactoryBean sessionFactory() { + final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); + sessionFactory.setDataSource(restDataSource()); + sessionFactory.setPackagesToScan(new String[] { "org.baeldung.ex.mappingexception.cause2.persistence.model2" }); + 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/Cause2MappingExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionIntegrationTest.java new file mode 100644 index 0000000000..c040686fba --- /dev/null +++ b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionIntegrationTest.java @@ -0,0 +1,29 @@ +package org.baeldung.ex.mappingexception; + +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; + +import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo; +import org.baeldung.ex.mappingexception.cause2.persistence.service.IFooService; +import org.baeldung.ex.mappingexception.spring.Cause2PersistenceConfig; +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; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { Cause2PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) +public class Cause2MappingExceptionIntegrationTest { + + @Autowired + private IFooService fooApi; + + // tests + + @Test + public final void givenEntityIsPersisted_thenException() { + fooApi.create(new Foo(randomAlphabetic(6))); + } + +}