/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.backendtck.queries.parameters; import static org.fest.assertions.Assertions.assertThat; import java.util.Arrays; import java.util.EnumSet; import java.util.GregorianCalendar; import java.util.List; import javax.persistence.EntityManager; import org.hibernate.ogm.utils.PackagingRule; import org.hibernate.ogm.utils.jpa.OgmJpaTestCase; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; /** * @author Gunnar Morling * */ public class QueryWithParametersTest extends OgmJpaTestCase { @Rule public PackagingRule packaging = new PackagingRule( "persistencexml/ogm.xml", Movie.class ); @Test public void canUseByteForSimpleComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.viewerRating = 8", Movie.class ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "To thatch a roof" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test public void canUseByteAsParameterForSimpleComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.viewerRating = :viewerRating", Movie.class ) .setParameter( "viewerRating", (byte) 8 ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "To thatch a roof" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test public void canUseByteAsParameterForInComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.viewerRating IN (:viewerRating)", Movie.class ) .setParameter( "viewerRating", Arrays.asList( (byte) 8, (byte) 9 ) ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "To thatch a roof", "South by Southeast" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test @Ignore("TODO HQLPARSER-59") public void canUseEnumLiteralForSimpleComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.genre = org.hibernate.ogm.backendtck.queries.enums.Genre.THRILLER", Movie.class ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "South by Southeast", "Front Door" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test public void canUseEnumAsParameterForSimpleComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.genre = :genre", Movie.class ) .setParameter( "genre", Genre.THRILLER ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "South by Southeast", "Front Door" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test public void canUseQueriesWithEnumAsParameterForInQuery() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.genre IN (:genre)", Movie.class ) .setParameter( "genre", EnumSet.of( Genre.DRAMA, Genre.COMEDY ) ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "To thatch a roof", "Barnie" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test @Ignore("TODO HQLPARSER-59") public void canUseBooleanLiteralForSimpleComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.suitableForKids = FALSE", Movie.class ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "Front Door", "Barnie" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test public void canUseBooleanAsParameterForSimpleComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.suitableForKids = :suitable", Movie.class ) .setParameter( "suitable", Boolean.FALSE ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "Front Door", "Barnie" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test @Ignore("TODO HQLPARSER-59") public void canUseDateLiteralForSimpleComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.releaseDate = '02 April 1958'", Movie.class ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "South by Southeast" ); entityManager.getTransaction().commit(); entityManager.close(); } @Test public void canUseDateParameterForSimpleComparison() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); List<Movie> thrillers = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.releaseDate = :releaseDate", Movie.class ) .setParameter( "releaseDate", new GregorianCalendar( 1958, 3, 2 ).getTime() ) .getResultList(); assertThat( thrillers ).onProperty( "title" ).containsOnly( "South by Southeast" ); entityManager.getTransaction().commit(); entityManager.close(); } @Before public void insertTestEntities() throws Exception { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); entityManager.persist( new Movie( "movie-1", Genre.COMEDY, "To thatch a roof", true, new GregorianCalendar( 1955, 5, 10 ).getTime(), (byte) 8 ) ); entityManager.persist( new Movie( "movie-2", Genre.THRILLER, "South by Southeast", true, new GregorianCalendar( 1958, 3, 2 ).getTime(), (byte) 9 ) ); entityManager.persist( new Movie( "movie-3", Genre.THRILLER, "Front Door", false, new GregorianCalendar( 1961, 2, 23 ).getTime(), (byte) 7 ) ); entityManager.persist( new Movie( "movie-4", Genre.DRAMA, "Barnie", false, new GregorianCalendar( 1962, 11, 2 ).getTime(), (byte) 7 ) ); entityManager.getTransaction().commit(); entityManager.close(); } @After public void removeTestEntities() { EntityManager entityManager = getFactory().createEntityManager(); entityManager.getTransaction().begin(); entityManager.remove( entityManager.find( Movie.class, "movie-1" ) ); entityManager.remove( entityManager.find( Movie.class, "movie-2" ) ); entityManager.remove( entityManager.find( Movie.class, "movie-3" ) ); entityManager.remove( entityManager.find( Movie.class, "movie-4" ) ); entityManager.getTransaction().commit(); entityManager.close(); } @Override protected Class<?>[] getAnnotatedClasses() { return new Class<?>[] { Movie.class }; } }