Skip to content

Commit 380e14b

Browse files
author
eugenp
committed
further persistence work
1 parent 62292a5 commit 380e14b

File tree

4 files changed

+143
-0
lines changed

4 files changed

+143
-0
lines changed

spring-exceptions/src/main/java/org/baeldung/ex/mappingexception/cause1/persistence/model/Foo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import java.io.Serializable;
44

5+
import javax.persistence.Entity;
56
import javax.persistence.GeneratedValue;
67
import javax.persistence.GenerationType;
78
import javax.persistence.Id;
89

10+
@Entity
911
public class Foo implements Serializable {
1012

1113
@Id
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.baeldung.ex.mappingexception.cause3.persistence.model;
2+
3+
import java.io.Serializable;
4+
5+
import javax.persistence.Entity;
6+
import javax.persistence.GeneratedValue;
7+
import javax.persistence.GenerationType;
8+
import javax.persistence.Id;
9+
10+
@Entity
11+
public class Foo implements Serializable {
12+
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.AUTO)
15+
private long id;
16+
17+
public Foo() {
18+
super();
19+
}
20+
21+
// API
22+
23+
public long getId() {
24+
return id;
25+
}
26+
27+
public void setId(final long id) {
28+
this.id = id;
29+
}
30+
31+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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.baeldung.ex.mappingexception.cause3.persistence.model.Foo;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.context.annotation.ComponentScan;
12+
import org.springframework.context.annotation.Configuration;
13+
import org.springframework.context.annotation.PropertySource;
14+
import org.springframework.core.env.Environment;
15+
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
16+
import org.springframework.orm.hibernate4.HibernateTransactionManager;
17+
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
18+
import org.springframework.transaction.annotation.EnableTransactionManagement;
19+
20+
import com.google.common.base.Preconditions;
21+
22+
@Configuration
23+
@EnableTransactionManagement
24+
@PropertySource({ "classpath:persistence-mysql.properties" })
25+
@ComponentScan({ "org.baeldung.ex.mappingexception.cause2.persistence" })
26+
public class Cause3PersistenceConfig {
27+
28+
@Autowired
29+
private Environment env;
30+
31+
public Cause3PersistenceConfig() {
32+
super();
33+
}
34+
35+
@Bean
36+
public LocalSessionFactoryBean sessionFactory() {
37+
final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
38+
sessionFactory.setDataSource(restDataSource());
39+
sessionFactory.setAnnotatedClasses(new Class[] { Foo.class });
40+
sessionFactory.setHibernateProperties(hibernateProperties());
41+
42+
return sessionFactory;
43+
}
44+
45+
@Bean
46+
public DataSource restDataSource() {
47+
final BasicDataSource dataSource = new BasicDataSource();
48+
dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
49+
dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url")));
50+
dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user")));
51+
dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass")));
52+
53+
return dataSource;
54+
}
55+
56+
@Bean
57+
public HibernateTransactionManager transactionManager() {
58+
final HibernateTransactionManager txManager = new HibernateTransactionManager();
59+
txManager.setSessionFactory(sessionFactory().getObject());
60+
61+
return txManager;
62+
}
63+
64+
@Bean
65+
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
66+
return new PersistenceExceptionTranslationPostProcessor();
67+
}
68+
69+
final Properties hibernateProperties() {
70+
return new Properties() {
71+
{
72+
setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
73+
setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
74+
75+
// setProperty("hibernate.globally_quoted_identifiers", "true");
76+
// note: necessary in launchpad-storage, but causing problems here
77+
}
78+
};
79+
}
80+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.baeldung.ex.mappingexception;
2+
3+
import org.baeldung.ex.mappingexception.cause3.persistence.model.Foo;
4+
import org.baeldung.ex.mappingexception.spring.Cause3PersistenceConfig;
5+
import org.hibernate.MappingException;
6+
import org.hibernate.SessionFactory;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.test.context.ContextConfiguration;
11+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12+
import org.springframework.test.context.support.AnnotationConfigContextLoader;
13+
import org.springframework.transaction.annotation.Transactional;
14+
15+
@RunWith(SpringJUnit4ClassRunner.class)
16+
@ContextConfiguration(classes = { Cause3PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class)
17+
public class Cause3MappingExceptionIntegrationTest {
18+
19+
@Autowired
20+
private SessionFactory sessionFactory;
21+
22+
// tests
23+
24+
@Test(expected = MappingException.class)
25+
@Transactional
26+
public final void givenEntityIsPersisted_thenException() {
27+
sessionFactory.getCurrentSession().saveOrUpdate(new Foo());
28+
}
29+
30+
}

0 commit comments

Comments
 (0)