Skip to content

Commit 5a1c890

Browse files
author
eugenp
committed
persistence work
1 parent c82d342 commit 5a1c890

File tree

7 files changed

+257
-0
lines changed

7 files changed

+257
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.baeldung.ex.mappingexception.cause2.persistence.dao;
2+
3+
import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo;
4+
import org.baeldung.persistence.common.AbstractHibernateDao;
5+
import org.hibernate.SessionFactory;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.stereotype.Repository;
8+
9+
@Repository
10+
public class FooDao extends AbstractHibernateDao<Foo> implements IFooDao {
11+
12+
@Autowired
13+
private SessionFactory sessionFactory;
14+
15+
public FooDao() {
16+
super();
17+
18+
setClazz(Foo.class);
19+
}
20+
21+
// API
22+
23+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.baeldung.ex.mappingexception.cause2.persistence.dao;
2+
3+
import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo;
4+
import org.baeldung.persistence.common.IOperations;
5+
6+
public interface IFooDao extends IOperations<Foo> {
7+
//
8+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package org.baeldung.ex.mappingexception.cause2.persistence.model;
2+
3+
import java.io.Serializable;
4+
5+
import javax.persistence.Column;
6+
import javax.persistence.Entity;
7+
import javax.persistence.GeneratedValue;
8+
import javax.persistence.GenerationType;
9+
import javax.persistence.Id;
10+
11+
@Entity
12+
public class Foo implements Serializable {
13+
14+
@Id
15+
@GeneratedValue(strategy = GenerationType.AUTO)
16+
private long id;
17+
18+
@Column(nullable = false)
19+
private String name;
20+
21+
public Foo() {
22+
super();
23+
}
24+
25+
public Foo(final String name) {
26+
super();
27+
28+
this.name = name;
29+
}
30+
31+
// API
32+
33+
public long getId() {
34+
return id;
35+
}
36+
37+
public void setId(final long id) {
38+
this.id = id;
39+
}
40+
41+
public String getName() {
42+
return name;
43+
}
44+
45+
public void setName(final String name) {
46+
this.name = name;
47+
}
48+
49+
//
50+
51+
@Override
52+
public int hashCode() {
53+
final int prime = 31;
54+
int result = 1;
55+
result = prime * result + ((name == null) ? 0 : name.hashCode());
56+
return result;
57+
}
58+
59+
@Override
60+
public boolean equals(final Object obj) {
61+
if (this == obj)
62+
return true;
63+
if (obj == null)
64+
return false;
65+
if (getClass() != obj.getClass())
66+
return false;
67+
final Foo other = (Foo) obj;
68+
if (name == null) {
69+
if (other.name != null)
70+
return false;
71+
} else if (!name.equals(other.name))
72+
return false;
73+
return true;
74+
}
75+
76+
@Override
77+
public String toString() {
78+
final StringBuilder builder = new StringBuilder();
79+
builder.append("Foo [name=").append(name).append("]");
80+
return builder.toString();
81+
}
82+
83+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.baeldung.ex.mappingexception.cause2.persistence.service;
2+
3+
import org.baeldung.ex.mappingexception.cause2.persistence.dao.IFooDao;
4+
import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo;
5+
import org.baeldung.persistence.common.AbstractService;
6+
import org.baeldung.persistence.common.IOperations;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.stereotype.Service;
9+
10+
@Service
11+
public class FooService extends AbstractService<Foo> implements IFooService {
12+
13+
@Autowired
14+
private IFooDao dao;
15+
16+
public FooService() {
17+
super();
18+
}
19+
20+
// API
21+
22+
@Override
23+
protected IOperations<Foo> getDao() {
24+
return dao;
25+
}
26+
27+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.baeldung.ex.mappingexception.cause2.persistence.service;
2+
3+
import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo;
4+
import org.baeldung.persistence.common.IOperations;
5+
6+
public interface IFooService extends IOperations<Foo> {
7+
//
8+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package org.baeldung.ex.mappingexception.spring;
2+
3+
import java.util.Properties;
4+
5+
import javax.sql.DataSource;
6+
7+
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.context.annotation.Bean;
10+
import org.springframework.context.annotation.ComponentScan;
11+
import org.springframework.context.annotation.Configuration;
12+
import org.springframework.context.annotation.PropertySource;
13+
import org.springframework.core.env.Environment;
14+
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
15+
import org.springframework.orm.hibernate4.HibernateTransactionManager;
16+
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
17+
import org.springframework.transaction.annotation.EnableTransactionManagement;
18+
19+
import com.google.common.base.Preconditions;
20+
21+
@Configuration
22+
@EnableTransactionManagement
23+
@PropertySource({ "classpath:persistence-mysql.properties" })
24+
@ComponentScan({ "org.baeldung.ex.mappingexception.cause2.persistence" })
25+
public class Cause2PersistenceConfig {
26+
27+
@Autowired
28+
private Environment env;
29+
30+
public Cause2PersistenceConfig() {
31+
super();
32+
}
33+
34+
@Bean
35+
public LocalSessionFactoryBean sessionFactory() {
36+
final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
37+
sessionFactory.setDataSource(restDataSource());
38+
sessionFactory.setPackagesToScan(new String[] { "org.baeldung.ex.mappingexception.cause2.persistence.model2" });
39+
sessionFactory.setHibernateProperties(hibernateProperties());
40+
41+
return sessionFactory;
42+
}
43+
44+
@Bean
45+
public DataSource restDataSource() {
46+
final BasicDataSource dataSource = new BasicDataSource();
47+
dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
48+
dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url")));
49+
dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user")));
50+
dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass")));
51+
52+
return dataSource;
53+
}
54+
55+
@Bean
56+
public HibernateTransactionManager transactionManager() {
57+
final HibernateTransactionManager txManager = new HibernateTransactionManager();
58+
txManager.setSessionFactory(sessionFactory().getObject());
59+
60+
return txManager;
61+
}
62+
63+
@Bean
64+
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
65+
return new PersistenceExceptionTranslationPostProcessor();
66+
}
67+
68+
final Properties hibernateProperties() {
69+
return new Properties() {
70+
{
71+
setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
72+
setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
73+
74+
// setProperty("hibernate.globally_quoted_identifiers", "true");
75+
// note: necessary in launchpad-storage, but causing problems here
76+
}
77+
};
78+
}
79+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.baeldung.ex.mappingexception;
2+
3+
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
4+
5+
import org.baeldung.ex.mappingexception.cause2.persistence.model.Foo;
6+
import org.baeldung.ex.mappingexception.cause2.persistence.service.IFooService;
7+
import org.baeldung.ex.mappingexception.spring.Cause2PersistenceConfig;
8+
import org.junit.Test;
9+
import org.junit.runner.RunWith;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.test.context.ContextConfiguration;
12+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
13+
import org.springframework.test.context.support.AnnotationConfigContextLoader;
14+
15+
@RunWith(SpringJUnit4ClassRunner.class)
16+
@ContextConfiguration(classes = { Cause2PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class)
17+
public class Cause2MappingExceptionIntegrationTest {
18+
19+
@Autowired
20+
private IFooService fooApi;
21+
22+
// tests
23+
24+
@Test
25+
public final void givenEntityIsPersisted_thenException() {
26+
fooApi.create(new Foo(randomAlphabetic(6)));
27+
}
28+
29+
}

0 commit comments

Comments
 (0)