Created
June 6, 2012 12:24
-
-
Save twasink/2881558 to your computer and use it in GitHub Desktop.
Spring, JPA, HSQLDB and automatically creating tables
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Same as the earlier gist, but with JPA wrapping hibernate. Note that the choice of wether to create the tables or not is in the spring-config file, NOT the persistence.xml file like a lot of other examples out there. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package net.twasink.hsqldbtest; | |
import static javax.persistence.GenerationType.AUTO; | |
import javax.persistence.Column; | |
import javax.persistence.Entity; | |
import javax.persistence.GeneratedValue; | |
import javax.persistence.Id; | |
import javax.persistence.Table; | |
@Entity | |
@Table | |
public class Foo { | |
@Id | |
@GeneratedValue(strategy = AUTO) | |
@Column | |
private long id; | |
@Column(length = 50, nullable = false, unique = true) | |
private String name; | |
@Column(length = 200, nullable = true) | |
private String description; | |
Foo() { | |
// for hibernate. | |
} | |
public Foo(String name) { | |
this.name = name; | |
} | |
public long getId() { | |
return id; | |
} | |
public String getName() { | |
return name; | |
} | |
public String getDescription() { | |
return description; | |
} | |
public void setDescription(String description) { | |
this.description = description; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package net.twasink.hsqldbtest; | |
import static org.junit.Assert.assertEquals; | |
import static org.junit.Assert.assertNotNull; | |
import static org.junit.Assert.assertTrue; | |
import java.util.List; | |
import javax.persistence.EntityManager; | |
import javax.persistence.PersistenceContext; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import org.springframework.test.context.ContextConfiguration; | |
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; | |
import org.springframework.transaction.annotation.Transactional; | |
@RunWith(SpringJUnit4ClassRunner.class) | |
@ContextConfiguration("/testContext.xml") | |
@Transactional | |
public class FooTest { | |
@PersistenceContext | |
private EntityManager entityManager; | |
@Test | |
public void shouldHaveAnEntityManager() { | |
assertNotNull(entityManager); | |
} | |
@Test | |
public void shouldHaveNoObjectsAtStart() { | |
List<?> results = entityManager.createQuery("from Foo").getResultList(); | |
assertTrue(results.isEmpty()); | |
} | |
@Test | |
public void shouldBeAbleToPersistAnObject() { | |
assertEquals(0, entityManager.createQuery("from Foo").getResultList().size()); | |
Foo jobUser = new Foo("Bar"); | |
entityManager.persist(jobUser); | |
entityManager.flush(); | |
assertEquals(1, entityManager.createQuery("from Foo").getResultList().size()); | |
} | |
@Test | |
public void shouldBeABleToQueryForObjects() { | |
shouldBeAbleToPersistAnObject(); | |
assertEquals(1, entityManager.createQuery("from Foo where name = 'Bar'").getResultList().size()); | |
assertEquals(0, entityManager.createQuery("from Foo where name = 'Baz'").getResultList().size()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<persistence xmlns="http://java.sun.com/xml/ns/persistence" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" | |
version="2.0"> | |
<persistence-unit name="testingSetup"> | |
<!-- The autodetection only works if the classes are packaged as a JAR. Doesn't work for unit tests. Go figure --> | |
<class>net.twasink.hsqldbtest.Foo</class> | |
<properties> | |
<property name="hibernate.archive.autodetection" value="" /> | |
<property name="hibernate.show_sql" value="true"/> | |
<!-- Could set this here, but we don't want it for normal use, so won't | |
<property name="hibernate.hbm2ddl.auto" value="create"/> | |
--> | |
</properties> | |
</persistence-unit> | |
</persistence> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>net.twasink</groupId> | |
<artifactId>hsqldb-jpatest</artifactId> | |
<version>0.0.1-SNAPSHOT</version> | |
<dependencies> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-orm</artifactId> | |
<version>3.0.6.RELEASE</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-tx</artifactId> | |
<version>3.0.6.RELEASE</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-aspects</artifactId> | |
<version>3.0.6.RELEASE</version> | |
</dependency> | |
<dependency> | |
<groupId>org.hibernate</groupId> | |
<artifactId>hibernate-entitymanager</artifactId> | |
<version>3.6.9.Final</version> | |
</dependency> | |
<dependency> | |
<groupId>org.aspectj</groupId> | |
<artifactId>aspectjrt</artifactId> | |
<version>1.5.4</version> | |
<scope>runtime</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.javassist</groupId> | |
<artifactId>javassist</artifactId> | |
<version>3.16.1-GA</version> | |
<scope>runtime</scope> | |
</dependency> | |
<!-- without a slf4j bridge, you get no logging if anything goes wrong. --> | |
<dependency> | |
<groupId>org.slf4j</groupId> | |
<artifactId>slf4j-log4j12</artifactId> | |
<version>1.6.4</version> | |
<scope>runtime</scope> | |
</dependency> | |
<dependency> | |
<groupId>junit</groupId> | |
<artifactId>junit</artifactId> | |
<version>4.10</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-test</artifactId> | |
<version>3.0.6.RELEASE</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> <!-- needed to get AOPs around the test cases --> | |
<groupId>cglib</groupId> | |
<artifactId>cglib-nodep</artifactId> | |
<version>2.2.2</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.hsqldb</groupId> | |
<artifactId>hsqldb</artifactId> | |
<version>2.2.8</version> | |
<scope>test</scope> | |
</dependency> | |
</dependencies> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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:jdbc="http://www.springframework.org/schema/jdbc" | |
xmlns:tx="http://www.springframework.org/schema/tx" | |
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd | |
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd | |
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd | |
"> | |
<jdbc:embedded-database id="dataSource" type="HSQL"> | |
</jdbc:embedded-database> | |
<bean id="entityManagerFactory" | |
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> | |
<property name="persistenceUnitName" value="testingSetup"/> | |
<property name="dataSource" ref="dataSource" /> | |
<property name="jpaVendorAdapter"> | |
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> | |
<!-- Create the database, please --> | |
<property name="generateDdl" value="true" /> | |
</bean> | |
</property> | |
</bean> | |
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> | |
<property name="entityManagerFactory" ref="entityManagerFactory" /> | |
</bean> | |
<tx:annotation-driven /> | |
</beans> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment