Skip to content

Commit 8b40b5d

Browse files
committed
Added hibernate standalone example
0 parents  commit 8b40b5d

File tree

13 files changed

+321
-0
lines changed

13 files changed

+321
-0
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.settings/
2+
.classpath
3+
.project
4+
target/

README.MD

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Hibernate examples
2+
==================
3+
4+
Hibernate examples from my blog http://geowarin.wordpress.com/tag/hibernate
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Simple JPA Hibernate Standalone with dbUnit tests
2+
=================================================
3+
4+
This is a very simple project using hibernate as a standalone (no server required) JPA provider.
5+
Features simple tests with dbUnit.
+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>com.geowarin</groupId>
6+
<artifactId>hibernate-jpa-standalone-dbunit</artifactId>
7+
<version>1.0-SNAPSHOT</version>
8+
<packaging>jar</packaging>
9+
10+
<name>simple-hibernate-jpa-standalone</name>
11+
<url>http://maven.apache.org</url>
12+
13+
<properties>
14+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15+
<maven.compiler.source>1.6</maven.compiler.source>
16+
<maven.compiler.target>1.6</maven.compiler.target>
17+
<log4j.version>1.2.16</log4j.version>
18+
<slf4j.version>1.6.1</slf4j.version>
19+
</properties>
20+
21+
<dependencies>
22+
23+
<dependency>
24+
<groupId>org.hibernate</groupId>
25+
<artifactId>hibernate-entitymanager</artifactId>
26+
<version>4.1.5.Final</version>
27+
</dependency>
28+
29+
<dependency>
30+
<groupId>org.hsqldb</groupId>
31+
<artifactId>hsqldb</artifactId>
32+
<version>2.2.9</version>
33+
</dependency>
34+
<dependency>
35+
<groupId>org.slf4j</groupId>
36+
<artifactId>slf4j-log4j12</artifactId>
37+
<version>1.7.2</version>
38+
</dependency>
39+
40+
<dependency>
41+
<groupId>junit</groupId>
42+
<artifactId>junit</artifactId>
43+
<version>4.11</version>
44+
<scope>test</scope>
45+
</dependency>
46+
<dependency>
47+
<groupId>org.dbunit</groupId>
48+
<artifactId>dbunit</artifactId>
49+
<version>2.4.9</version>
50+
</dependency>
51+
</dependencies>
52+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.geowarin.hibernate.jpa.standalone;
2+
3+
import javax.persistence.EntityManager;
4+
import javax.persistence.EntityManagerFactory;
5+
import javax.persistence.Persistence;
6+
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
import com.geowarin.hibernate.jpa.standalone.model.User;
11+
12+
/**
13+
* Simple standalone JPA app.
14+
* Will load the user inserted by the script import-users.sql
15+
*
16+
* @author Geoffroy Warin (https://github.com/geowarin)
17+
*
18+
*/
19+
public class App {
20+
21+
private static Logger log = LoggerFactory.getLogger(App.class);
22+
23+
public static void main(String[] args) {
24+
25+
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("persistence");
26+
EntityManager entityManager = entityManagerFactory.createEntityManager();
27+
28+
User found = entityManager.find(User.class, 1L);
29+
log.info("found=" + found);
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
package com.geowarin.hibernate.jpa.standalone.model;
3+
4+
import java.io.Serializable;
5+
6+
import javax.persistence.Column;
7+
import javax.persistence.Entity;
8+
import javax.persistence.GeneratedValue;
9+
import javax.persistence.GenerationType;
10+
import javax.persistence.Id;
11+
import javax.persistence.Table;
12+
13+
@Table(name = "users")
14+
@Entity
15+
public class User implements Serializable {
16+
17+
private static final long serialVersionUID = 1L;
18+
19+
@Id
20+
@GeneratedValue(strategy=GenerationType.AUTO)
21+
private long id;
22+
23+
@Column(name = "name", nullable = false, unique=true, length=50)
24+
private String name;
25+
26+
public long getId() {
27+
return id;
28+
}
29+
30+
public void setId(long id) {
31+
this.id = id;
32+
}
33+
34+
public String getName() {
35+
return name;
36+
}
37+
38+
public void setName(String name) {
39+
this.name = name;
40+
}
41+
42+
@Override
43+
public String toString() {
44+
return "User [id=" + id + ", name=" + name + "]";
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<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">
2+
3+
<persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL">
4+
5+
<provider>org.hibernate.ejb.HibernatePersistence</provider>
6+
<class>com.geowarin.hibernate.jpa.standalone.model.User</class>
7+
8+
<properties>
9+
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
10+
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:standalone"/>
11+
<property name="javax.persistence.jdbc.user" value="sa"/>
12+
<property name="javax.persistence.jdbc.password" value=""/>
13+
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
14+
<property name="hibernate.hbm2ddl.auto" value="create"/>
15+
<property name="hibernate.hbm2ddl.import_files" value="sql/import-users.sql"/>
16+
<property name="hibernate.show_sql" value="true"/>
17+
<property name="hibernate.format_sql" value="false"/>
18+
</properties>
19+
20+
</persistence-unit>
21+
22+
</persistence>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
2+
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
3+
log4j.appender.Stdout.layout.conversionPattern=%-5p - %-c - %m\n
4+
5+
log4j.rootLogger=INFO,Stdout
6+
log4j.logger.org.hibernate=INFO
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
INSERT INTO users(id, name) VALUES(1, 'admin');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.geowarin.hibernate.jpa.standalone;
2+
3+
import java.io.InputStream;
4+
import java.sql.SQLException;
5+
6+
import javax.persistence.EntityManager;
7+
import javax.persistence.EntityManagerFactory;
8+
import javax.persistence.Persistence;
9+
10+
import org.dbunit.DatabaseUnitException;
11+
import org.dbunit.database.DatabaseConfig;
12+
import org.dbunit.database.DatabaseConnection;
13+
import org.dbunit.database.IDatabaseConnection;
14+
import org.dbunit.dataset.IDataSet;
15+
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
16+
import org.dbunit.ext.hsqldb.HsqldbDataTypeFactory;
17+
import org.dbunit.operation.DatabaseOperation;
18+
import org.hibernate.HibernateException;
19+
import org.hibernate.internal.SessionImpl;
20+
import org.junit.AfterClass;
21+
import org.junit.Before;
22+
import org.junit.BeforeClass;
23+
24+
/**
25+
* Abstract unit test case class.
26+
* This will load the test-data.xml dataset before each test case and will clean the database before each test
27+
*
28+
* @author Geoffroy Warin (https://github.com/geowarin)
29+
*
30+
*/
31+
public abstract class AbstractDbUnitJpaTest {
32+
33+
private static EntityManagerFactory entityManagerFactory;
34+
private static IDatabaseConnection connection;
35+
private static IDataSet dataset;
36+
protected static EntityManager entityManager;
37+
38+
/**
39+
* Will load test-dataset.xml before each test case
40+
* @throws DatabaseUnitException
41+
* @throws HibernateException
42+
*/
43+
@BeforeClass
44+
public static void initEntityManager() throws HibernateException, DatabaseUnitException {
45+
entityManagerFactory = Persistence.createEntityManagerFactory("persistence-test");
46+
entityManager = entityManagerFactory.createEntityManager();
47+
connection = new DatabaseConnection(((SessionImpl) (entityManager.getDelegate())).connection());
48+
connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
49+
50+
FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder();
51+
flatXmlDataSetBuilder.setColumnSensing(true);
52+
InputStream dataSet = Thread.currentThread().getContextClassLoader().getResourceAsStream("test-data.xml");
53+
dataset = flatXmlDataSetBuilder.build(dataSet);
54+
}
55+
56+
@AfterClass
57+
public static void closeEntityManager() {
58+
entityManager.close();
59+
entityManagerFactory.close();
60+
}
61+
62+
/**
63+
* Will clean the dataBase before each test
64+
*
65+
* @throws SQLException
66+
* @throws DatabaseUnitException
67+
*/
68+
@Before
69+
public void cleanDB() throws DatabaseUnitException, SQLException {
70+
DatabaseOperation.CLEAN_INSERT.execute(connection, dataset);
71+
}
72+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.geowarin.hibernate.jpa.standalone;
2+
3+
4+
import java.util.List;
5+
6+
import org.junit.Assert;
7+
import org.junit.Test;
8+
9+
import com.geowarin.hibernate.jpa.standalone.model.User;
10+
11+
/**
12+
*
13+
*
14+
* @author Geoffroy Warin (https://github.com/geowarin)
15+
*
16+
*/
17+
public class AppTest extends AbstractDbUnitJpaTest {
18+
19+
@Test
20+
public void testFind() {
21+
22+
User user = entityManager.find(User.class, 1L);
23+
Assert.assertNotNull(user);
24+
Assert.assertEquals("userTest", user.getName());
25+
}
26+
27+
@Test
28+
public void testInsert() {
29+
30+
User newUser = new User();
31+
newUser.setName("insert");
32+
33+
entityManager.getTransaction().begin();
34+
35+
entityManager.persist(newUser);
36+
long id = newUser.getId();
37+
38+
entityManager.getTransaction().commit();
39+
40+
User user = entityManager.find(User.class, id);
41+
Assert.assertNotNull(user);
42+
Assert.assertEquals("insert", user.getName());
43+
}
44+
45+
@Test
46+
public void testFindAll() {
47+
48+
List<User> allUsers = entityManager.createQuery("from User").getResultList();
49+
Assert.assertEquals(2, allUsers.size());
50+
}
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<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">
2+
3+
<persistence-unit name="persistence-test" transaction-type="RESOURCE_LOCAL">
4+
5+
<provider>org.hibernate.ejb.HibernatePersistence</provider>
6+
<class>com.geowarin.hibernate.jpa.standalone.model.User</class>
7+
8+
<properties>
9+
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
10+
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:standalone-test"/>
11+
<property name="javax.persistence.jdbc.user" value="sa"/>
12+
<property name="javax.persistence.jdbc.password" value=""/>
13+
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
14+
<property name="hibernate.hbm2ddl.auto" value="create"/>
15+
<property name="hibernate.show_sql" value="true"/>
16+
<property name="hibernate.format_sql" value="true"/>
17+
</properties>
18+
19+
</persistence-unit>
20+
21+
</persistence>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<dataset>
3+
<USERS id="1" name="userTest" />
4+
<USERS id="2" name="userTest2" />
5+
</dataset>

0 commit comments

Comments
 (0)