package groovy.jpa import org.springframework.jdbc.datasource.DriverManagerDataSource import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean import javax.persistence.EntityManagerFactory import javax.persistence.EntityManager import demo.jpa.Person import org.grails.plugins.jpa.util.JPATestHelper /** * JPA Test depends on Spring & HSQL for setting up the test environment. JPA itself doesn't depend on Spring. */ public class JPACoreCategoryTests extends GroovyTestCase { def emf, em; void setUp() { emf = JPATestHelper.createTempEntityManagerFactory(includes: 'demo.jpa.*') em = emf.createEntityManager() } void tearDown() { } void testTestInfrastructure() { assertNotNull emf assertTrue emf instanceof EntityManagerFactory assertNotNull em assertTrue em instanceof EntityManager } void testExecuteQuery() { em.transaction.begin() em.persist(new Person(name: 'person1')) em.persist(new Person(name: 'person2')) em.persist(new Person(name: 'person3')) em.transaction.commit() // 1 - simpliest use(JPACoreCategory) { assertEquals 3, em.executeQuery("select p from Person p")?.size() assertEquals 1, em.executeQuery("select p from Person p where p.name = 'person1'")?.size() assertEquals 'person1', em.executeQuery("select p from Person p where p.name = 'person1'")[0].'name' assertEquals 1, em.executeQuery("select p from Person p where p.name = 'person1'")[0].'id' //default id 1 } // 2 - with parameter use(JPACoreCategory) { assertEquals 1, em.executeQuery("select p from Person p where p.name = ?", ['person1'])?.size() assertEquals 'person1', em.executeQuery("select p from Person p where p.name = ?", ['person1'])[0].'name' } // 3 - use limit use(JPACoreCategory) { assertEquals 2, em.executeQuery("select p from Person p", [], 2)?.size() } // 4 - use limit and from use(JPACoreCategory) { assertEquals 1, em.executeQuery("select p from Person p", [], 1, 1)?.size() assertEquals 'person2', em.executeQuery("select p from Person p", [], 1, 1)[0].'name' } } void testGetEntity() { em.transaction.begin() em.persist(new Person(name: 'person1')) em.persist(new Person(name: 'person2')) em.persist(new Person(name: 'person3')) em.transaction.commit() use(JPACoreCategory) { assertEquals 'person1', em.getEntity('class': Person.class, id: 1L)?.'name' assertEquals 'person1', em.getEntity('query': "select p from Person p where p.name = 'person1'")?.'name' assertEquals 'person1', em.getEntity('query': "select p from Person p where p.name = ?", params: ['person1'])?.'name' assertEquals 'person1', em.getEntity('sql': "SELECT * FROM DEMO_PERSON p WHERE p.NAME = 'person1'", 'mapBy': Person.class)?.'name' } } void testGetEntities() { em.transaction.begin() em.persist(new Person(name: 'person1')) em.persist(new Person(name: 'person2')) em.persist(new Person(name: 'person3')) em.transaction.commit() use(JPACoreCategory) { assertEquals 3, em.getEntities('query': 'select p from Person p')?.size() assertEquals 'person1', em.getEntities('query': 'select p from Person p')[0].'name' assertEquals 3, em.getEntities('sql': 'SELECT * FROM DEMO_PERSON p', 'mapBy': Person.class)?.size() assertEquals 'person1', em.getEntities('sql': 'SELECT * FROM DEMO_PERSON p', 'mapBy': Person.class)[0].'name' } } }