package io.robe.hibernate.criteria.api.criteria; import io.robe.common.utils.TypeReference; import io.robe.hibernate.criteria.api.Criteria; import io.robe.hibernate.criteria.api.CriteriaJoin; import io.robe.hibernate.criteria.HqlCriteriaTestTools; import io.robe.hibernate.criteria.api.criterion.Restrictions; import io.robe.hibernate.criteria.api.projection.Projections; import io.robe.hibernate.criteria.hql.TransformerImpl; import io.robe.hibernate.test.entity.Role; import io.robe.hibernate.test.entity.User; import org.hibernate.Session; import org.junit.Test; import java.util.List; import java.util.Map; import static org.junit.Assert.*; /** * Created by kamilbukum on 18/01/2017. */ public class CriteriaParentTest extends HqlCriteriaTestTools { private static final double DELTA = 1e-15; @Test public void createJoin() throws Exception { } @Test public void createJoin1() throws Exception { } @Test public void getJoin() throws Exception { } @Test public void getJoins() throws Exception { } @Test public void getProjection() throws Exception { } @Test public void add() throws Exception { } @Test public void getRestrictions() throws Exception { } @Test public void getAlias() throws Exception { } @Test public void addOrder() throws Exception { } @Test public void getEntityClass() throws Exception { } @Test public void getIdentityName() throws Exception { } @Test public void setProjection() throws Exception { Session session = sessionFactory.openSession(); List<User> expectedUserList = Criteria .createCriteria(User.class, new TransformerImpl<User>(session)).list(); // rowCount Criteria<Map<String, Object>> criteria = Criteria .createCriteria(Role.class, new TransformerImpl<>(session, Criteria.MAP_CLASS)) .setProjection( Projections.projectionList().add(Projections.groupProperty("name")).add(Projections.count("name")) ); Object resultProperty = criteria.pairList(); System.out.println(resultProperty); // rowCount Criteria<User> userCriteria = Criteria.createCriteria(User.class, new TransformerImpl<User>(session)).setProjection(Projections.rowCount()); long result = (long)userCriteria.uniqueResult(); assertEquals(result, expectedUserList.size()); // count userCriteria = Criteria .createCriteria(User.class, new TransformerImpl<User>(session)).setProjection(Projections.count("name")); result = (long)userCriteria.uniqueResult(); assertEquals(result, expectedUserList.size()); // alias userCriteria = Criteria .createCriteria(User.class, new TransformerImpl<User>(session)).setProjection(Projections.alias(Projections.count("name"), "name")); result = (long)userCriteria.uniqueResult(); assertEquals(result, expectedUserList.size()); // sum userCriteria = Criteria .createCriteria(User.class, new TransformerImpl<User>(session)).setProjection(Projections.sum("failCount")); result = (long) userCriteria.uniqueResult(); long expected = expectedUserList.stream().mapToInt(User::getFailCount).sum(); assertEquals(result, expected); // max userCriteria = Criteria.createCriteria(User.class, new TransformerImpl<User>(session)).setProjection(Projections.max("failCount")); result = (int) userCriteria.uniqueResult(); expected = expectedUserList.stream().mapToInt(User::getFailCount).max().getAsInt(); assertEquals(result, expected); // min userCriteria = Criteria.createCriteria(User.class, new TransformerImpl<User>(session)).setProjection(Projections.min("failCount")); result = (int) userCriteria.uniqueResult(); expected = expectedUserList.stream().mapToInt(User::getFailCount).min().getAsInt(); assertEquals(result, expected); // avg userCriteria = Criteria .createCriteria(User.class, new TransformerImpl<User>(session)).setProjection(Projections.avg("failCount")); double resultAvg = (double) userCriteria.uniqueResult(); double expectedAvg = expectedUserList.stream().mapToInt(User::getFailCount).average().getAsDouble(); assertEquals(resultAvg, expectedAvg, DELTA); } @Test public void getTransformer() throws Exception { Session session = sessionFactory.openSession(); Criteria<User> criteria = Criteria .createCriteria(User.class, new TransformerImpl<User>(session)); CriteriaJoin join = criteria.createJoin(Role.class, "roleOid"); assertNotNull(criteria.getTransformer()); assertNotNull(join.getTransformer()); } }