BAEL-2806 (#6591)
* BAEL-2806 Article companion code. * BAEL-2806-Rev1 Added integration tests, improved examples and fixed an error.
This commit is contained in:
parent
1c82623201
commit
0b9a5b3d04
|
@ -0,0 +1,69 @@
|
||||||
|
package com.baeldung.jpa.querytypes;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
import javax.persistence.Persistence;
|
||||||
|
import javax.persistence.Query;
|
||||||
|
import javax.persistence.TypedQuery;
|
||||||
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
import javax.persistence.criteria.Root;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JPA Query Types examples. All using the UserEntity class.
|
||||||
|
*
|
||||||
|
* @author Rodolfo Felipe
|
||||||
|
*/
|
||||||
|
public class QueryTypesExamples {
|
||||||
|
|
||||||
|
EntityManagerFactory emf;
|
||||||
|
|
||||||
|
public QueryTypesExamples() {
|
||||||
|
Map properties = new HashMap();
|
||||||
|
properties.put("hibernate.show_sql", "true");
|
||||||
|
properties.put("hibernate.format_sql", "true");
|
||||||
|
emf = Persistence.createEntityManagerFactory("jpa-query-types", properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
private EntityManager getEntityManager() {
|
||||||
|
return emf.createEntityManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUserByIdWithPlainQuery(Long id) {
|
||||||
|
Query jpqlQuery = getEntityManager().createQuery("SELECT u FROM UserEntity u WHERE u.id=:id");
|
||||||
|
jpqlQuery.setParameter("id", id);
|
||||||
|
return (UserEntity) jpqlQuery.getSingleResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUserByIdWithTypedQuery(Long id) {
|
||||||
|
TypedQuery<UserEntity> typedQuery = getEntityManager().createQuery("SELECT u FROM UserEntity u WHERE u.id=:id", UserEntity.class);
|
||||||
|
typedQuery.setParameter("id", id);
|
||||||
|
return typedQuery.getSingleResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUserByIdWithNamedQuery(Long id) {
|
||||||
|
Query namedQuery = getEntityManager().createNamedQuery("UserEntity.findByUserId");
|
||||||
|
namedQuery.setParameter("userId", id);
|
||||||
|
return (UserEntity) namedQuery.getSingleResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUserByIdWithNativeQuery(Long id) {
|
||||||
|
Query nativeQuery = getEntityManager().createNativeQuery("SELECT * FROM users WHERE id=:userId", UserEntity.class);
|
||||||
|
nativeQuery.setParameter("userId", id);
|
||||||
|
return (UserEntity) nativeQuery.getSingleResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserEntity getUserByIdWithCriteriaQuery(Long id) {
|
||||||
|
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
|
||||||
|
CriteriaQuery<UserEntity> criteriaQuery = criteriaBuilder.createQuery(UserEntity.class);
|
||||||
|
Root<UserEntity> userRoot = criteriaQuery.from(UserEntity.class);
|
||||||
|
UserEntity queryResult = getEntityManager().createQuery(criteriaQuery.select(userRoot)
|
||||||
|
.where(criteriaBuilder.equal(userRoot.get("id"), id)))
|
||||||
|
.getSingleResult();
|
||||||
|
return queryResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.baeldung.jpa.querytypes;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.NamedQuery;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User entity class. Used as an asset for JPA Query Types examples.
|
||||||
|
*
|
||||||
|
* @author Rodolfo Felipe
|
||||||
|
*/
|
||||||
|
@Table(name = "users")
|
||||||
|
@Entity
|
||||||
|
@NamedQuery(name = "UserEntity.findByUserId", query = "SELECT u FROM UserEntity u WHERE u.id=:userId")
|
||||||
|
public class UserEntity {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -89,24 +89,45 @@
|
||||||
</persistence-unit>
|
</persistence-unit>
|
||||||
|
|
||||||
<persistence-unit name="jpa-h2-criteria">
|
<persistence-unit name="jpa-h2-criteria">
|
||||||
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||||
<class>com.baeldung.jpa.criteria.entity.Item</class>
|
<class>com.baeldung.jpa.criteria.entity.Item</class>
|
||||||
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
||||||
<properties>
|
<properties>
|
||||||
<property name="javax.persistence.jdbc.driver"
|
<property name="javax.persistence.jdbc.driver"
|
||||||
value="org.h2.Driver" />
|
value="org.h2.Driver" />
|
||||||
<property name="javax.persistence.jdbc.url"
|
<property name="javax.persistence.jdbc.url"
|
||||||
value="jdbc:h2:mem:test" />
|
value="jdbc:h2:mem:test" />
|
||||||
<property name="javax.persistence.jdbc.user" value="sa" />
|
<property name="javax.persistence.jdbc.user" value="sa" />
|
||||||
<property name="javax.persistence.jdbc.password" value="" />
|
<property name="javax.persistence.jdbc.password" value="" />
|
||||||
<property name="hibernate.dialect"
|
<property name="hibernate.dialect"
|
||||||
value="org.hibernate.dialect.H2Dialect" />
|
value="org.hibernate.dialect.H2Dialect" />
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
|
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
|
||||||
<property name="show_sql" value="true" />
|
<property name="show_sql" value="true" />
|
||||||
<property name="hibernate.temp.use_jdbc_metadata_defaults"
|
<property name="hibernate.temp.use_jdbc_metadata_defaults"
|
||||||
value="false" />
|
value="false" />
|
||||||
<property name="javax.persistence.sql-load-script-source" value="item.sql"/>
|
<property name="javax.persistence.sql-load-script-source" value="item.sql"/>
|
||||||
</properties>
|
</properties>
|
||||||
</persistence-unit>
|
</persistence-unit>
|
||||||
|
|
||||||
|
<persistence-unit name="jpa-query-types">
|
||||||
|
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||||
|
<class>com.baeldung.jpa.querytypes.UserEntity</class>
|
||||||
|
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
||||||
|
<properties>
|
||||||
|
<property name="javax.persistence.jdbc.driver"
|
||||||
|
value="org.h2.Driver" />
|
||||||
|
<property name="javax.persistence.jdbc.url"
|
||||||
|
value="jdbc:h2:mem:test" />
|
||||||
|
<property name="javax.persistence.jdbc.user" value="sa" />
|
||||||
|
<property name="javax.persistence.jdbc.password" value="" />
|
||||||
|
<property name="hibernate.dialect"
|
||||||
|
value="org.hibernate.dialect.H2Dialect" />
|
||||||
|
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
|
||||||
|
<property name="show_sql" value="true" />
|
||||||
|
<property name="hibernate.temp.use_jdbc_metadata_defaults"
|
||||||
|
value="false" />
|
||||||
|
<property name="javax.persistence.sql-load-script-source" value="users.sql"/>
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
|
||||||
</persistence>
|
</persistence>
|
|
@ -0,0 +1,65 @@
|
||||||
|
package com.baeldung.jpa.querytypes;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* QueryTypesExamples class integration tests.
|
||||||
|
*
|
||||||
|
* @author Rodolfo Felipe
|
||||||
|
*/
|
||||||
|
public class QueryTypesExamplesIntegrationTest {
|
||||||
|
|
||||||
|
QueryTypesExamples userDao = new QueryTypesExamples();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUserId_whenCallingPlaingQueryMethod_thenReturnExpectedUser() {
|
||||||
|
UserEntity firstUser = userDao.getUserByIdWithPlainQuery(1L);
|
||||||
|
Assert.assertNotNull("User not found", firstUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "baeldung", firstUser.getName());
|
||||||
|
UserEntity lastUser = userDao.getUserByIdWithPlainQuery(4L);
|
||||||
|
Assert.assertNotNull("User not found", lastUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "batman", lastUser.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUserId_whenCallingTypedQueryMethod_thenReturnExpectedUser() {
|
||||||
|
UserEntity firstUser = userDao.getUserByIdWithTypedQuery(1L);
|
||||||
|
Assert.assertNotNull("User not found", firstUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "baeldung", firstUser.getName());
|
||||||
|
UserEntity lastUser = userDao.getUserByIdWithTypedQuery(4L);
|
||||||
|
Assert.assertNotNull("User not found", lastUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "batman", lastUser.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUserId_whenCallingNamedQueryMethod_thenReturnExpectedUser() {
|
||||||
|
UserEntity firstUser = userDao.getUserByIdWithNamedQuery(1L);
|
||||||
|
Assert.assertNotNull("User not found", firstUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "baeldung", firstUser.getName());
|
||||||
|
UserEntity lastUser = userDao.getUserByIdWithNamedQuery(4L);
|
||||||
|
Assert.assertNotNull("User not found", lastUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "batman", lastUser.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUserId_whenCallingNativeQueryMethod_thenReturnExpectedUser() {
|
||||||
|
UserEntity firstUser = userDao.getUserByIdWithNativeQuery(1L);
|
||||||
|
Assert.assertNotNull("User not found", firstUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "baeldung", firstUser.getName());
|
||||||
|
UserEntity lastUser = userDao.getUserByIdWithNativeQuery(4L);
|
||||||
|
Assert.assertNotNull("User not found", lastUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "batman", lastUser.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenUserId_whenCallingCriteriaApiMethod_thenReturnExpectedUser() {
|
||||||
|
UserEntity firstUser = userDao.getUserByIdWithCriteriaQuery(1L);
|
||||||
|
Assert.assertNotNull("User not found", firstUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "baeldung", firstUser.getName());
|
||||||
|
UserEntity lastUser = userDao.getUserByIdWithCriteriaQuery(4L);
|
||||||
|
Assert.assertNotNull("User not found", lastUser);
|
||||||
|
Assert.assertEquals("User should be baeldung", "batman", lastUser.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
INSERT INTO users(id,name) VALUES(1,'baeldung');
|
||||||
|
INSERT INTO users(id,name) VALUES(2,'john doe');
|
||||||
|
INSERT INTO users(id,name) VALUES(3,'jane doe');
|
||||||
|
INSERT INTO users(id,name) VALUES(4,'batman');
|
Loading…
Reference in New Issue