From 730ebd57afc3b8f71bf360a24b47b7df57415368 Mon Sep 17 00:00:00 2001 From: egmp777 Date: Fri, 9 May 2014 15:45:46 -0500 Subject: [PATCH 1/4] Update FooSortingServiceTest.java --- .../service/FooSortingServiceTest.java | 458 ++++++------------ 1 file changed, 144 insertions(+), 314 deletions(-) diff --git a/spring-hibernate4/src/test/java/org/baeldung/persistence/service/FooSortingServiceTest.java b/spring-hibernate4/src/test/java/org/baeldung/persistence/service/FooSortingServiceTest.java index 9fc80b8621ed..9d6f3c355a17 100644 --- a/spring-hibernate4/src/test/java/org/baeldung/persistence/service/FooSortingServiceTest.java +++ b/spring-hibernate4/src/test/java/org/baeldung/persistence/service/FooSortingServiceTest.java @@ -1,390 +1,220 @@ package org.baeldung.persistence.service; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; - -import org.baeldung.persistence.model.Bar; import org.baeldung.persistence.model.Foo; +import org.baeldung.persistence.service.IFooService; import org.baeldung.spring.PersistenceConfig; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.dao.InvalidDataAccessApiUsageException; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; +import static org.junit.Assert.*; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.After; +import java.util.List; +import java.util.Set; import org.hibernate.Criteria; import org.hibernate.NullPrecedence; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.Transaction; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Order; -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.test.context.support.AnnotationConfigContextLoader; - -import com.google.common.collect.Lists; +import com.cc.example.hibernate.Foo; +import com.cc.example.hibernate.Bar; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) + + + public class FooSortingServiceTest { + private static Configuration configuration; + private static StandardServiceRegistryBuilder builder; + private static SessionFactory sf; + private static Session sess; - // tests + @BeforeClass + public static void before() { - @Test - public final void whenHQlSortingByOneAttribute_thenPrintSortedResults() { - Session sess = null; - List fooList = Lists.newArrayList(); - - try { - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - final String hql = "FROM Foo f ORDER BY f.name"; - final Query query = sess.createQuery(hql); - fooList = query.list(); - for (final Foo foo : fooList) { - System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId()); - } - final Transaction tr = sess.beginTransaction(); - tr.commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } - } + configuration = new Configuration().configure(); + builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); + sf = configuration.buildSessionFactory(builder.build()); + sess = sf.openSession(); + sess.beginTransaction(); + } + @After + public void after() { } @Test - public final void whenHQlSortingByOneAttribute_andOrderDirection_thenPrintSortedResults() { - Session sess = null; - List fooList = Lists.newArrayList(); - - try { - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - final String hql = "FROM Foo f ORDER BY f.name ASC"; - final Query query = sess.createQuery(hql); - fooList = query.list(); - for (final Foo foo : fooList) { - System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId()); - } - final Transaction tr = sess.beginTransaction(); - tr.commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + public final void whenHQlSortingByOneAttribute_thenPrintSortedResults() { + + final String hql = "FROM Foo f ORDER BY f.name"; + final Query query = sess.createQuery(hql); + final List fooList = query.list(); + for (final Foo foo : fooList) { + System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId()); } + sess.getTransaction().commit(); } @Test - public final void whenHQlSortingByMultipleAttributes_thenSortedResults() { - Session sess = null; - List fooList = Lists.newArrayList(); - - try { - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - final String hql = "FROM Foo f ORDER BY f.name, f.id"; - final Query query = sess.createQuery(hql); - fooList = query.list(); - for (final Foo foo : fooList) { - System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId()); - } - final Transaction tr = sess.beginTransaction(); - tr.commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + public final void whenHQlSortingByStringNullLast_thenLastNull() { + + final String hql = "FROM Foo f ORDER BY f.name NULLS LAST"; + final Query query = sess.createQuery(hql); + final List fooList = query.list(); + assertNull(fooList.get(fooList.toArray().length - 1).getName()); + for (final Foo foo : fooList) { + System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId()); } + sess.getTransaction().commit(); } @Test - public final void whenHQlSortingByMultipleAttributes_andOrderDirection_thenPrintSortedOrderedResults() { - Session sess = null; - List fooList = Lists.newArrayList(); - - try { - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - final String hql = "FROM Foo f ORDER BY f.name DESC, f.id ASC"; - final Query query = sess.createQuery(hql); - fooList = query.list(); - for (final Foo foo : fooList) { - System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId()); - } - final Transaction tr = sess.beginTransaction(); - tr.commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + public final void whenSortingByStringNullsFirst_thenReturnNullsFirst() { + + final String hql = "FROM Foo f ORDER BY f.name NULLS FIRST"; + final Query query = sess.createQuery(hql); + final List fooList = query.list(); + assertNull(fooList.get(0).getName()); + for (final Foo foo : fooList) { + System.out.println("Name:" + foo.getName()); + } + sess.getTransaction().commit(); } @Test - public final void whenCriteriaSortingByOneAttr_thenPrintSortedResults() { - Session sess = null; - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - List fooList = Lists.newArrayList(); - try { - sess.beginTransaction(); - final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); - criteria.addOrder(Order.asc("id")); - fooList = criteria.list(); - assertEquals(1, fooList.get(0).getId()); - assertEquals(100, fooList.get(fooList.toArray().length - 1).getId()); - for (final Foo foo : fooList) { - System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName()); - } + public final void whenHQlSortingByOneAttribute_andOrderDirection_thenPrintSortedResults() { - sess.getTransaction().commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + final String hql = "FROM Foo f ORDER BY f.name ASC"; + final Query query = sess.createQuery(hql); + final List fooList = query.list(); + for (final Foo foo : fooList) { + System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId() + + ); } + sess.getTransaction().commit(); + } @Test - public final void whenCriteriaSortingByMultipAttr_thenSortedResults() { - Session sess = null; - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - List fooList = Lists.newArrayList(); - try { - sess.beginTransaction(); - final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); - criteria.addOrder(Order.asc("name")); - criteria.addOrder(Order.asc("id")); - fooList = criteria.list(); - for (final Foo foo : fooList) { - System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName()); - } + public final void whenHQlSortingByMultipleAttributes_thenSortedResults() { - sess.getTransaction().commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + final String hql = "FROM Foo f ORDER BY f.name, f.id"; + final Query query = sess.createQuery(hql); + final List fooList = query.list(); + for (final Foo foo : fooList) { + System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId() + + ); } + sess.getTransaction().commit(); + } @Test - public final void whenCriteriaSortingStringNullsLastAsc_thenNullsLast() { - Session sess = null; - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - List fooList = Lists.newArrayList(); - try { - sess.beginTransaction(); - final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); - criteria.addOrder(Order.asc("name").nulls(NullPrecedence.LAST)); - fooList = criteria.list(); - assertNull(fooList.get(fooList.toArray().length - 1).getName()); - for (final Foo foo : fooList) { - System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName()); - } - sess.getTransaction().commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + public final void whenHQlSortingByMultipleAttributes_andOrderDirection_thenPrintSortedResults() { + + final String hql = "FROM Foo f ORDER BY f.name DESC, f.id ASC"; + final Query query = sess.createQuery(hql); + final List fooList = query.list(); + for (final Foo foo : fooList) { + System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId()); } + sess.getTransaction().commit(); + } @Test - public final void whenCriteriaSortingStringNullsFirstDesc_thenNullsFirst() { - Session sess = null; - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - List fooList = Lists.newArrayList(); - try { - sess.beginTransaction(); - final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); - criteria.addOrder(Order.desc("name").nulls(NullPrecedence.FIRST)); - fooList = criteria.list(); - assertNull(fooList.get(0).getName()); - for (final Foo foo : fooList) { - System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName()); - } - sess.getTransaction().commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + public final void whenHQLCriteriaSortingByOneAttr_thenPrintSortedResults() { + + final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); + criteria.addOrder(Order.asc("id")); + final List fooList = criteria.list(); + for (final Foo foo : fooList) { + System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName()); } + sess.getTransaction().commit(); + } @Test - public final void whenHQlSortingByStringNullLast_thenLastNull() { - Session sess = null; - List fooList = Lists.newArrayList(); - - try { - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - final String hql = "FROM Foo f ORDER BY f.name NULLS LAST"; - - final Query query = sess.createQuery(hql); - fooList = query.list(); - assertNull(fooList.get(fooList.toArray().length - 1).getName()); - for (final Foo foo : fooList) { - System.out.println("Name: " + foo.getName() + ", Id: " + foo.getId()); - } - final Transaction tr = sess.beginTransaction(); - tr.commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + public final void whenHQLCriteriaSortingByMultipAttr_thenSortedResults() { + + final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); + criteria.addOrder(Order.asc("name")); + criteria.addOrder(Order.asc("id")); + final List fooList = criteria.list(); + for (final Foo foo : fooList) { + System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName()); } + sess.getTransaction().commit(); } @Test - public final void whenSortingBars_thenBarsWithSortedFoos() { - Session sess = null; - final Set fooList = new TreeSet(); - List barList = Lists.newArrayList(); - - try { - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - final String hql = "FROM Bar b ORDER BY b.id"; - final Query query = sess.createQuery(hql); - barList = query.list(); - - for (final Bar bar : barList) { - System.out.println("Bar Id:" + bar.getId()); - for (final Foo foo : bar.getFooList()) { - System.out.println("FooName:" + foo.getName()); - } - } - final Transaction tr = sess.beginTransaction(); - tr.commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } + public final void whenCriteriaSortingStringNullsLastAsc_thenNullsLast() { + + final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); + criteria.addOrder(Order.asc("name").nulls(NullPrecedence.LAST)); + final List fooList = criteria.list(); + assertNull(fooList.get(fooList.toArray().length - 1).getName()); + for (final Foo foo : fooList) { + System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName()); + } + sess.getTransaction().commit(); } - // @Test - // public final void whenSortingPrimitiveNulls_thenException() { - // Session sess = null; - // List fooList = new ArrayList(); - // final List barList = new ArrayList(); - // - // try { - // final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - // sess = sf.openSession(); - // final String hql = "FROM Foo f ORDER BY f.idx"; - // final Query query = sess.createQuery(hql); - // boolean thrown = false; - // try { - // fooList = criteria.list(); - // } catch (final org.hibernate.PropertyAccessException e) { - // thrown = true; - // } - // assertTrue(thrown); - // - // final Transaction tr = sess.beginTransaction(); - // tr.commit(); - // } catch (final Exception ex) { - // ex.printStackTrace(); - // } finally { - // if (sess != null) { - // sess.close(); - // } - // } - // } - @Test - public final void whenSortingStringNullsLast_thenReturnNullsLast() { - Session sess = null; - List fooList = Lists.newArrayList(); - final List barList = Lists.newArrayList(); - - try { - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - final String hql = "FROM Foo f ORDER BY f.name NULLS LAST"; - final Query query = sess.createQuery(hql); - fooList = query.list(); - assertNull(fooList.get(fooList.toArray().length - 1).getName()); - for (final Foo foo : fooList) { - System.out.println("FooIDX:" + foo.getName()); + public final void whenCriteriaSortingStringNullsFirstDesc_thenNullsFirst() { - } + final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); + criteria.addOrder(Order.desc("name").nulls(NullPrecedence.FIRST)); + final List fooList = criteria.list(); + assertNull(fooList.get(0).getName()); + for (final Foo foo : fooList) { + System.out.println("Id: " + foo.getId() + ", FirstName: " + foo.getName()); - final Transaction tr = sess.beginTransaction(); - tr.commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); - } } + sess.getTransaction().commit(); } @Test - public final void whenNullPrimitiveValueCriteriaSortingByMultipAttr_thenException() { - Session sess = null; - final SessionFactory sf = new Configuration().configure().buildSessionFactory(); - sess = sf.openSession(); - List fooList = Lists.newArrayList(); - try { - sess.beginTransaction(); - final Criteria criteria = sess.createCriteria(Foo.class, "FOO"); - criteria.addOrder(Order.desc("name").nulls(NullPrecedence.FIRST)); - criteria.addOrder(Order.asc("idx")); - boolean thrown = false; - try { - fooList = criteria.list(); - } catch (final org.hibernate.PropertyAccessException e) { - thrown = true; - } - assertTrue(thrown); - - sess.getTransaction().commit(); - } catch (final Exception ex) { - ex.printStackTrace(); - } finally { - if (sess != null) { - sess.close(); + public final void whenSortingBars_thenBarsWithSortedFoos() { + + final String hql = "FROM Bar b ORDER BY b.id"; + final Query query = sess.createQuery(hql); + final List barList = query.list(); + for (final Bar bar : barList) { + final Set fooSet = bar.getFooList(); + System.out.println("Bar Id:" + bar.getId()); + for (final Foo foo : fooSet) { + System.out.println("FooName:" + foo.getName()); + } } + sess.getTransaction().commit(); + } + } From 80cb34833ca1b4698ea4de4746884fe6ceacfc26 Mon Sep 17 00:00:00 2001 From: egmp777 Date: Fri, 9 May 2014 15:48:57 -0500 Subject: [PATCH 2/4] Update Bar.java --- .../org/baeldung/persistence/model/Bar.java | 68 ++++++++++--------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/spring-hibernate4/src/main/java/org/baeldung/persistence/model/Bar.java b/spring-hibernate4/src/main/java/org/baeldung/persistence/model/Bar.java index ddc60bf0c9e2..0489dbc21a90 100644 --- a/spring-hibernate4/src/main/java/org/baeldung/persistence/model/Bar.java +++ b/spring-hibernate4/src/main/java/org/baeldung/persistence/model/Bar.java @@ -1,60 +1,63 @@ package org.baeldung.persistence.model; import java.io.Serializable; -import java.util.List; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import java.util.Set; +import com.google.common.collect.Sets; +import javax.persistence.*; +import org.hibernate.annotations.OrderBy; @Entity +@NamedQuery(name = "Bar.findAll", query = "SELECT b FROM Bar b") public class Bar implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private long id; - - @Column(nullable = false) - private String name; - - private List foos; - public Bar() { super(); } public Bar(final String name) { super(); - + this.name = name; } - // API + private static final long serialVersionUID = 1L; + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + private String name; + + @OneToMany(mappedBy = "bar", cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @OrderBy(clause = "NAME DESC") + Set fooSet = Sets.newHashSet(); + + //API + + public Set getFooSet() { + return fooSet; + } + + public void setFooList(Set fooSet) { + this.fooSet = fooSet; + } - public long getId() { - return id; + public int getId() { + return this.id; } - public void setId(final long id) { + public void setId(int id) { this.id = id; } public String getName() { - return name; + return this.name; } - public void setName(final String name) { + public void setName(String name) { this.name = name; } - - public List getFooList() { - return foos; - } - // - + @Override public int hashCode() { final int prime = 31; @@ -62,7 +65,7 @@ public int hashCode() { result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } - + @Override public boolean equals(final Object obj) { if (this == obj) @@ -79,12 +82,13 @@ public boolean equals(final Object obj) { return false; return true; } - + @Override public String toString() { final StringBuilder builder = new StringBuilder(); - builder.append("Foo [name=").append(name).append("]"); + builder.append("Bar [name=").append(name).append("]"); return builder.toString(); } + } From 82ccad7146e0d734edc33273df9cd1b56546f718 Mon Sep 17 00:00:00 2001 From: egmp777 Date: Fri, 9 May 2014 15:51:04 -0500 Subject: [PATCH 3/4] Update Bar.java --- .../org/baeldung/persistence/model/Bar.java | 48 +++++++++++-------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java b/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java index ddc60bf0c9e2..b3e789b9ce67 100644 --- a/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java +++ b/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java @@ -1,60 +1,66 @@ package org.baeldung.persistence.model; import java.io.Serializable; -import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.CascadeType; @Entity public class Bar implements Serializable { - + @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; - + @Column(nullable = false) private String name; - - private List foos; - + + @OneToMany(mappedBy = "bar", fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @OrderBy("name ASC") + List fooList; + public Bar() { super(); } - + public Bar(final String name) { super(); - + this.name = name; } - + // API - + public long getId() { return id; } - + public void setId(final long id) { this.id = id; } - + public String getName() { return name; } - + public void setName(final String name) { this.name = name; } - + public List getFooList() { - return foos; + return fooList; } - + + public void setFooList(final List fooList) { + this.fooList = fooList; + } + // - + @Override public int hashCode() { final int prime = 31; @@ -62,7 +68,7 @@ public int hashCode() { result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } - + @Override public boolean equals(final Object obj) { if (this == obj) @@ -79,12 +85,12 @@ public boolean equals(final Object obj) { return false; return true; } - + @Override public String toString() { final StringBuilder builder = new StringBuilder(); - builder.append("Foo [name=").append(name).append("]"); + builder.append("Bar [name=").append(name).append("]"); return builder.toString(); } - + } From 554df1148d0ca5132195078ffe3e2735ee9af58e Mon Sep 17 00:00:00 2001 From: egmp777 Date: Fri, 9 May 2014 15:52:41 -0500 Subject: [PATCH 4/4] Update FooServiceSortingTests.java --- .../service/FooServiceSortingTests.java | 126 ++++++++---------- 1 file changed, 53 insertions(+), 73 deletions(-) diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingTests.java b/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingTests.java index 0cc8645af8bb..e1ecbd2015f7 100644 --- a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingTests.java +++ b/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingTests.java @@ -1,11 +1,7 @@ package org.baeldung.persistence.service; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - +import static org.junit.Assert.*; import java.util.List; - import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; @@ -15,82 +11,79 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; - -import org.baeldung.persistence.model.Bar; -import org.baeldung.persistence.model.Foo; -import org.junit.After; +import com.google.common.collect.Lists; import org.junit.BeforeClass; import org.junit.Test; +import com.cc.jpa.example.Foo; +import com.cc.jpa.example.Bar; public class FooServiceSortingTests { - private EntityManager entityManager; + private static EntityManager entityManager; + private static EntityManagerFactory emf; + private static EntityTransaction entityTransaction; + private static CriteriaBuilder criteriaBuilder; @BeforeClass public static void before() { - // - } - @After - public final void after() { - // + emf = Persistence.createEntityManagerFactory("punit"); + entityManager = emf.createEntityManager(); + entityTransaction = entityManager.getTransaction(); + entityTransaction.begin(); + criteriaBuilder = entityManager.getCriteriaBuilder(); } @Test public final void whenSortingByOneAttributeDefaultOrder_thenPrintSortedResult() { - final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - final EntityManager entityManager = emf.createEntityManager(); - final EntityTransaction entityTransaction = entityManager.getTransaction(); - entityTransaction.begin(); final String jql = "Select f from Foo as f order by f.id"; final Query sortQuery = entityManager.createQuery(jql); final List fooList = sortQuery.getResultList(); - assertEquals(1, fooList.get(0).getId()); - assertEquals(100, fooList.get(fooList.toArray().length - 1).getId()); for (final Foo foo : fooList) { System.out.println("Name:" + foo.getName() + "-------Id:" + foo.getId()); } + } @Test public final void whenSortingByOneAttributeSetOrder_thenSortedPrintResult() { - final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - final EntityManager entityManager = emf.createEntityManager(); - final EntityTransaction entityTransaction = entityManager.getTransaction(); - entityTransaction.begin(); final String jql = "Select f from Foo as f order by f.id desc"; final Query sortQuery = entityManager.createQuery(jql); final List fooList = sortQuery.getResultList(); - assertEquals(100, fooList.get(0).getId()); - assertEquals(1, fooList.get(fooList.toArray().length - 1).getId()); for (final Foo foo : fooList) { System.out.println("Name:" + foo.getName() + "-------Id:" + foo.getId()); } + } @Test public final void whenSortingByTwoAttributes_thenPrintSortedResult() { - final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - final EntityManager entityManager = emf.createEntityManager(); - final EntityTransaction entityTransaction = entityManager.getTransaction(); - entityTransaction.begin(); + final String jql = "Select f from Foo as f order by f.name asc, f.id desc"; final Query sortQuery = entityManager.createQuery(jql); final List fooList = sortQuery.getResultList(); for (final Foo foo : fooList) { System.out.println("Name:" + foo.getName() + "-------Id:" + foo.getId()); } + + } + + @Test + public final void whenSortingFooByBar_thenBarsSorted() { + + final String jql = "Select f from Foo as f order by f.name, f.bar.id"; + final Query barJoinQuery = entityManager.createQuery(jql); + final List fooList = barJoinQuery.getResultList(); + for (final Foo foo : fooList) { + System.out.println("Name:" + foo.getName() + "-------BarId:" + foo.getBar().getId()); + } } @Test public final void whenSortinfBar_thenPrintBarsSortedWithFoos() { - final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - final EntityManager entityManager = emf.createEntityManager(); - final EntityTransaction entityTransaction = entityManager.getTransaction(); - entityTransaction.begin(); - final String jql = "Select b from Bar as b order by b.id"; + final String jql = "Select b from Bar as b order by b.id"; final Query barQuery = entityManager.createQuery(jql); final List barList = barQuery.getResultList(); for (final Bar bar : barList) { @@ -99,15 +92,12 @@ public final void whenSortinfBar_thenPrintBarsSortedWithFoos() { System.out.println("FooName:" + foo.getName()); } } + } @Test public final void whenSortingByStringNullLast_thenLastNull() { - final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - final EntityManager entityManager = emf.createEntityManager(); - final EntityTransaction entityTransaction = entityManager.getTransaction(); - entityTransaction.begin(); final String jql = "Select f from Foo as f order by f.name desc NULLS LAST"; final Query sortQuery = entityManager.createQuery(jql); final List fooList = sortQuery.getResultList(); @@ -117,43 +107,34 @@ public final void whenSortingByStringNullLast_thenLastNull() { } } - // @Test - // public final void whenSortingByStringNullFirst_thenFirstNull() { - // final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - // final EntityManager entityManager = emf.createEntityManager(); - // final EntityTransaction entityTransaction = entityManager.getTransaction(); - // entityTransaction.begin(); - // final String jql = "Select f from Foo as f order by f.name desc NULLS FIRST"; - // final Query sortQuery = entityManager.createQuery(jql); - // final List fooList = sortQuery.getResultList(); - // assertNull(fooList.get(0).getName()); - // for (final Foo foo : fooList) { - // System.out.println("Name:" + foo.getName() + "-------Id:" + foo.getTest_Null()); - // } - // } - @Test - public final void whenSortingByIntNull_thenException() { - final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - final EntityManager entityManager = emf.createEntityManager(); - final EntityTransaction entityTransaction = entityManager.getTransaction(); - entityTransaction.begin(); - final String jql = "Select f from Foo as f order by f.test_Null desc NULLS FIRST"; + public final void whenSortingByStringNullFirst_thenFirstNull() { + + final Foo nullNameFoo = new Foo(); + nullNameFoo.setName(null); + + final Bar bar = new Bar(); + final List fooList1 = Lists.newArrayList(); + bar.setName("Bar_Me"); + nullNameFoo.setBar(bar); + fooList1.add(nullNameFoo); + bar.setFooList(fooList1); + entityManager.persist(bar); + entityManager.persist(nullNameFoo); + entityTransaction.commit(); + final String jql = "Select f from Foo as f order by f.name desc NULLS FIRST"; final Query sortQuery = entityManager.createQuery(jql); - boolean thrown = false; - try { - final List fooList = sortQuery.getResultList(); - } catch (final javax.persistence.PersistenceException e) { - thrown = true; + final List fooList = sortQuery.getResultList(); + assertNull(fooList.get(0).getName()); + for (final Foo foo : fooList) { + System.out.println("Name:" + foo.getName()); } - assertTrue(thrown); } @Test public final void whenSortingFooWithCriteria_thenPrintSortedFoos() { - final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - final EntityManager entityManager = emf.createEntityManager(); - final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + + criteriaBuilder = entityManager.getCriteriaBuilder(); final CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Foo.class); final Root from = criteriaQuery.from(Foo.class); final CriteriaQuery select = criteriaQuery.select(from); @@ -168,9 +149,8 @@ public final void whenSortingFooWithCriteria_thenPrintSortedFoos() { @Test public final void whenSortingFooWithCriteriaAndMultipleAttributes_thenPrintSortedFoos() { - final EntityManagerFactory emf = Persistence.createEntityManagerFactory("punit"); - final EntityManager entityManager = emf.createEntityManager(); - final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + + criteriaBuilder = entityManager.getCriteriaBuilder(); final CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Foo.class); final Root from = criteriaQuery.from(Foo.class); final CriteriaQuery select = criteriaQuery.select(from);