Merge pull request #6929 from amit2103/BAEL-14316
[BAEL-14316] - Copied code for Bootstrapping Hibernate with Spring ar…
This commit is contained in:
commit
30b2ce8343
|
@ -5,7 +5,6 @@
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
|
|
||||||
- [Introduction to Hibernate Search](http://www.baeldung.com/hibernate-search)
|
- [Introduction to Hibernate Search](http://www.baeldung.com/hibernate-search)
|
||||||
- [Bootstrapping Hibernate 5 with Spring](http://www.baeldung.com/hibernate-5-spring)
|
|
||||||
- [Introduction to Lettuce – the Java Redis Client](http://www.baeldung.com/java-redis-lettuce)
|
- [Introduction to Lettuce – the Java Redis Client](http://www.baeldung.com/java-redis-lettuce)
|
||||||
- [A Guide to Jdbi](http://www.baeldung.com/jdbi)
|
- [A Guide to Jdbi](http://www.baeldung.com/jdbi)
|
||||||
- [Pessimistic Locking in JPA](http://www.baeldung.com/jpa-pessimistic-locking)
|
- [Pessimistic Locking in JPA](http://www.baeldung.com/jpa-pessimistic-locking)
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
### Relevant Articles:
|
### Relevant Articles:
|
||||||
- [A Guide to JPA with Spring](https://www.baeldung.com/the-persistence-layer-with-spring-and-jpa)
|
- [A Guide to JPA with Spring](https://www.baeldung.com/the-persistence-layer-with-spring-and-jpa)
|
||||||
|
- [Bootstrapping Hibernate 5 with Spring](http://www.baeldung.com/hibernate-5-spring)
|
||||||
|
|
||||||
|
|
||||||
### Eclipse Config
|
### Eclipse Config
|
||||||
|
|
|
@ -32,7 +32,16 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- persistence -->
|
<!-- persistence -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hibernate</groupId>
|
||||||
|
<artifactId>hibernate-core</artifactId>
|
||||||
|
<version>${hibernate.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.transaction</groupId>
|
||||||
|
<artifactId>jta</artifactId>
|
||||||
|
<version>${jta.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hibernate</groupId>
|
<groupId>org.hibernate</groupId>
|
||||||
<artifactId>hibernate-entitymanager</artifactId>
|
<artifactId>hibernate-entitymanager</artifactId>
|
||||||
|
@ -55,6 +64,12 @@
|
||||||
<version>${h2.version}</version>
|
<version>${h2.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.tomcat</groupId>
|
||||||
|
<artifactId>tomcat-dbcp</artifactId>
|
||||||
|
<version>${tomcat-dbcp.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- utils -->
|
<!-- utils -->
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -104,6 +119,8 @@
|
||||||
<hibernate.version>5.4.2.Final</hibernate.version>
|
<hibernate.version>5.4.2.Final</hibernate.version>
|
||||||
<mysql-connector-java.version>6.0.6</mysql-connector-java.version>
|
<mysql-connector-java.version>6.0.6</mysql-connector-java.version>
|
||||||
<spring-data-jpa.version>2.1.6.RELEASE</spring-data-jpa.version>
|
<spring-data-jpa.version>2.1.6.RELEASE</spring-data-jpa.version>
|
||||||
|
<tomcat-dbcp.version>9.0.0.M26</tomcat-dbcp.version>
|
||||||
|
<jta.version>1.1</jta.version>
|
||||||
|
|
||||||
<!-- util -->
|
<!-- util -->
|
||||||
<guava.version>21.0</guava.version>
|
<guava.version>21.0</guava.version>
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.baeldung.hibernate.bootstrap;
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.bootstrap.model.TestEntity;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
public abstract class BarHibernateDAO {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SessionFactory sessionFactory;
|
||||||
|
|
||||||
|
public TestEntity findEntity(int id) {
|
||||||
|
|
||||||
|
return getCurrentSession().find(TestEntity.class, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createEntity(TestEntity entity) {
|
||||||
|
|
||||||
|
getCurrentSession().save(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createEntity(int id, String newDescription) {
|
||||||
|
|
||||||
|
TestEntity entity = findEntity(id);
|
||||||
|
entity.setDescription(newDescription);
|
||||||
|
getCurrentSession().save(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteEntity(int id) {
|
||||||
|
|
||||||
|
TestEntity entity = findEntity(id);
|
||||||
|
getCurrentSession().delete(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Session getCurrentSession() {
|
||||||
|
return sessionFactory.getCurrentSession();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.baeldung.hibernate.bootstrap;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
|
import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.PropertySource;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.orm.hibernate5.HibernateTransactionManager;
|
||||||
|
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
|
||||||
|
import org.springframework.transaction.PlatformTransactionManager;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableTransactionManagement
|
||||||
|
@PropertySource({ "classpath:persistence-h2.properties" })
|
||||||
|
public class HibernateConf {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private Environment env;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public LocalSessionFactoryBean sessionFactory() {
|
||||||
|
final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
|
||||||
|
sessionFactory.setDataSource(dataSource());
|
||||||
|
sessionFactory.setPackagesToScan(new String[] { "com.baeldung.hibernate.bootstrap.model" });
|
||||||
|
sessionFactory.setHibernateProperties(hibernateProperties());
|
||||||
|
|
||||||
|
return sessionFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DataSource dataSource() {
|
||||||
|
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 PlatformTransactionManager hibernateTransactionManager() {
|
||||||
|
final HibernateTransactionManager transactionManager = new HibernateTransactionManager();
|
||||||
|
transactionManager.setSessionFactory(sessionFactory().getObject());
|
||||||
|
return transactionManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Properties hibernateProperties() {
|
||||||
|
final Properties hibernateProperties = new Properties();
|
||||||
|
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
|
||||||
|
hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
|
||||||
|
|
||||||
|
return hibernateProperties;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.hibernate.bootstrap;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
|
import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.ImportResource;
|
||||||
|
import org.springframework.context.annotation.PropertySource;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.orm.hibernate5.HibernateTransactionManager;
|
||||||
|
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
|
||||||
|
import org.springframework.transaction.PlatformTransactionManager;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableTransactionManagement
|
||||||
|
@ImportResource({ "classpath:hibernate5Configuration.xml" })
|
||||||
|
public class HibernateXMLConf {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.baeldung.hibernate.bootstrap.model;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class TestEntity {
|
||||||
|
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
|
||||||
|
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"
|
||||||
|
>
|
||||||
|
|
||||||
|
<context:property-placeholder location="classpath:persistence-mysql.properties"/>
|
||||||
|
|
||||||
|
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
|
||||||
|
<property name="dataSource" ref="dataSource"/>
|
||||||
|
<property name="packagesToScan" value="com.baeldung.persistence.model"/>
|
||||||
|
<property name="hibernateProperties">
|
||||||
|
<props>
|
||||||
|
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
|
||||||
|
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
|
||||||
|
</props>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
|
||||||
|
<property name="driverClassName" value="${jdbc.driverClassName}"/>
|
||||||
|
<property name="url" value="${jdbc.url}"/>
|
||||||
|
<property name="username" value="${jdbc.eventGeneratedId}"/>
|
||||||
|
<property name="password" value="${jdbc.pass}"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
|
||||||
|
<property name="sessionFactory" ref="sessionFactory"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
|
||||||
|
|
||||||
|
</beans>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||||
|
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
|
||||||
|
|
||||||
|
<context:property-placeholder location="classpath:persistence-h2.properties"/>
|
||||||
|
|
||||||
|
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
|
||||||
|
<property name="dataSource" ref="dataSource"/>
|
||||||
|
<property name="packagesToScan" value="com.baeldung.hibernate.bootstrap.model"/>
|
||||||
|
<property name="hibernateProperties">
|
||||||
|
<props>
|
||||||
|
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
|
||||||
|
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
|
||||||
|
</props>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
|
||||||
|
<property name="driverClassName" value="${jdbc.driverClassName}"/>
|
||||||
|
<property name="url" value="${jdbc.url}"/>
|
||||||
|
<property name="username" value="${jdbc.user}"/>
|
||||||
|
<property name="password" value="${jdbc.pass}"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
|
||||||
|
<property name="sessionFactory" ref="sessionFactory"/>
|
||||||
|
</bean>
|
||||||
|
</beans>
|
|
@ -0,0 +1,13 @@
|
||||||
|
# jdbc.X
|
||||||
|
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
|
||||||
|
jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate5_01?createDatabaseIfNotExist=true
|
||||||
|
jdbc.eventGeneratedId=tutorialuser
|
||||||
|
jdbc.pass=tutorialmy5ql
|
||||||
|
|
||||||
|
# hibernate.X
|
||||||
|
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
|
||||||
|
hibernate.show_sql=false
|
||||||
|
hibernate.hbm2ddl.auto=create-drop
|
||||||
|
|
||||||
|
# envers.X
|
||||||
|
envers.audit_table_suffix=_audit_log
|
|
@ -0,0 +1,185 @@
|
||||||
|
package com.baeldung.hibernate.bootstrap;
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.bootstrap.model.TestEntity;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.test.annotation.Commit;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
import org.springframework.test.context.support.AnnotationConfigContextLoader;
|
||||||
|
import org.springframework.test.context.transaction.TestTransaction;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import static junit.framework.TestCase.assertFalse;
|
||||||
|
import static junit.framework.TestCase.assertTrue;
|
||||||
|
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@ContextConfiguration(classes = { HibernateConf.class })
|
||||||
|
@Transactional
|
||||||
|
public class HibernateBootstrapIntegrationTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SessionFactory sessionFactory;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenBootstrapHibernateSession_thenNoException() {
|
||||||
|
|
||||||
|
Session session = sessionFactory.getCurrentSession();
|
||||||
|
|
||||||
|
TestEntity newEntity = new TestEntity();
|
||||||
|
newEntity.setId(1);
|
||||||
|
session.save(newEntity);
|
||||||
|
|
||||||
|
TestEntity searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNotNull(searchEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenProgrammaticTransactionCommit_thenEntityIsInDatabase() {
|
||||||
|
assertTrue(TestTransaction.isActive());
|
||||||
|
|
||||||
|
//Save an entity and commit.
|
||||||
|
Session session = sessionFactory.getCurrentSession();
|
||||||
|
|
||||||
|
TestEntity newEntity = new TestEntity();
|
||||||
|
newEntity.setId(1);
|
||||||
|
session.save(newEntity);
|
||||||
|
|
||||||
|
TestEntity searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNotNull(searchEntity);
|
||||||
|
assertTrue(TestTransaction.isFlaggedForRollback());
|
||||||
|
|
||||||
|
TestTransaction.flagForCommit();
|
||||||
|
TestTransaction.end();
|
||||||
|
|
||||||
|
assertFalse(TestTransaction.isFlaggedForRollback());
|
||||||
|
assertFalse(TestTransaction.isActive());
|
||||||
|
|
||||||
|
//Check that the entity is still there in a new transaction,
|
||||||
|
//then delete it, but don't commit.
|
||||||
|
TestTransaction.start();
|
||||||
|
|
||||||
|
assertTrue(TestTransaction.isFlaggedForRollback());
|
||||||
|
assertTrue(TestTransaction.isActive());
|
||||||
|
|
||||||
|
session = sessionFactory.getCurrentSession();
|
||||||
|
searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNotNull(searchEntity);
|
||||||
|
|
||||||
|
session.delete(searchEntity);
|
||||||
|
session.flush();
|
||||||
|
|
||||||
|
TestTransaction.end();
|
||||||
|
|
||||||
|
assertFalse(TestTransaction.isActive());
|
||||||
|
|
||||||
|
//Check that the entity is still there in a new transaction,
|
||||||
|
//then delete it and commit.
|
||||||
|
TestTransaction.start();
|
||||||
|
|
||||||
|
session = sessionFactory.getCurrentSession();
|
||||||
|
searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNotNull(searchEntity);
|
||||||
|
|
||||||
|
session.delete(searchEntity);
|
||||||
|
session.flush();
|
||||||
|
|
||||||
|
assertTrue(TestTransaction.isActive());
|
||||||
|
|
||||||
|
TestTransaction.flagForCommit();
|
||||||
|
TestTransaction.end();
|
||||||
|
|
||||||
|
assertFalse(TestTransaction.isActive());
|
||||||
|
|
||||||
|
//Check that the entity is no longer there in a new transaction.
|
||||||
|
TestTransaction.start();
|
||||||
|
|
||||||
|
assertTrue(TestTransaction.isActive());
|
||||||
|
|
||||||
|
session = sessionFactory.getCurrentSession();
|
||||||
|
searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNull(searchEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Commit
|
||||||
|
public void givenTransactionCommitDefault_whenProgrammaticTransactionCommit_thenEntityIsInDatabase() {
|
||||||
|
assertTrue(TestTransaction.isActive());
|
||||||
|
|
||||||
|
//Save an entity and commit.
|
||||||
|
Session session = sessionFactory.getCurrentSession();
|
||||||
|
|
||||||
|
TestEntity newEntity = new TestEntity();
|
||||||
|
newEntity.setId(1);
|
||||||
|
session.save(newEntity);
|
||||||
|
|
||||||
|
TestEntity searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNotNull(searchEntity);
|
||||||
|
assertFalse(TestTransaction.isFlaggedForRollback());
|
||||||
|
|
||||||
|
TestTransaction.end();
|
||||||
|
|
||||||
|
assertFalse(TestTransaction.isFlaggedForRollback());
|
||||||
|
assertFalse(TestTransaction.isActive());
|
||||||
|
|
||||||
|
//Check that the entity is still there in a new transaction,
|
||||||
|
//then delete it, but don't commit.
|
||||||
|
TestTransaction.start();
|
||||||
|
|
||||||
|
assertFalse(TestTransaction.isFlaggedForRollback());
|
||||||
|
assertTrue(TestTransaction.isActive());
|
||||||
|
|
||||||
|
session = sessionFactory.getCurrentSession();
|
||||||
|
searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNotNull(searchEntity);
|
||||||
|
|
||||||
|
session.delete(searchEntity);
|
||||||
|
session.flush();
|
||||||
|
|
||||||
|
TestTransaction.flagForRollback();
|
||||||
|
TestTransaction.end();
|
||||||
|
|
||||||
|
assertFalse(TestTransaction.isActive());
|
||||||
|
|
||||||
|
//Check that the entity is still there in a new transaction,
|
||||||
|
//then delete it and commit.
|
||||||
|
TestTransaction.start();
|
||||||
|
|
||||||
|
session = sessionFactory.getCurrentSession();
|
||||||
|
searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNotNull(searchEntity);
|
||||||
|
|
||||||
|
session.delete(searchEntity);
|
||||||
|
session.flush();
|
||||||
|
|
||||||
|
assertTrue(TestTransaction.isActive());
|
||||||
|
|
||||||
|
TestTransaction.end();
|
||||||
|
|
||||||
|
assertFalse(TestTransaction.isActive());
|
||||||
|
|
||||||
|
//Check that the entity is no longer there in a new transaction.
|
||||||
|
TestTransaction.start();
|
||||||
|
|
||||||
|
assertTrue(TestTransaction.isActive());
|
||||||
|
|
||||||
|
session = sessionFactory.getCurrentSession();
|
||||||
|
searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNull(searchEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.baeldung.hibernate.bootstrap;
|
||||||
|
|
||||||
|
import com.baeldung.hibernate.bootstrap.model.TestEntity;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.junit.Assert;
|
||||||
|
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.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@ContextConfiguration(classes = { HibernateXMLConf.class })
|
||||||
|
@Transactional
|
||||||
|
public class HibernateXMLBootstrapIntegrationTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SessionFactory sessionFactory;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenBootstrapHibernateSession_thenNoException() {
|
||||||
|
|
||||||
|
Session session = sessionFactory.getCurrentSession();
|
||||||
|
|
||||||
|
TestEntity newEntity = new TestEntity();
|
||||||
|
newEntity.setId(1);
|
||||||
|
session.save(newEntity);
|
||||||
|
|
||||||
|
TestEntity searchEntity = session.find(TestEntity.class, 1);
|
||||||
|
|
||||||
|
Assert.assertNotNull(searchEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue