📄 criteriaquerytest.java
字号:
//$Id: CriteriaQueryTest.java 10976 2006-12-12 23:22:26Z steve.ebersole@jboss.com $package org.hibernate.test.criteria;import java.util.List;import java.util.Map;import junit.framework.Test;import org.hibernate.Criteria;import org.hibernate.FetchMode;import org.hibernate.Hibernate;import org.hibernate.ScrollableResults;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.cfg.Environment;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Example;import org.hibernate.criterion.MatchMode;import org.hibernate.criterion.Order;import org.hibernate.criterion.Projection;import org.hibernate.criterion.Projections;import org.hibernate.criterion.Property;import org.hibernate.criterion.Restrictions;import org.hibernate.criterion.Subqueries;import org.hibernate.junit.functional.FunctionalTestCase;import org.hibernate.junit.functional.FunctionalTestClassTestSuite;import org.hibernate.test.hql.Animal;import org.hibernate.test.hql.Reptile;import org.hibernate.transform.Transformers;import org.hibernate.type.Type;import org.hibernate.util.SerializationHelper;/** * @author Gavin King */public class CriteriaQueryTest extends FunctionalTestCase { public CriteriaQueryTest(String str) { super(str); } public String[] getMappings() { return new String[] { "criteria/Enrolment.hbm.xml", "hql/Animal.hbm.xml" }; } public void configure(Configuration cfg) { super.configure( cfg ); cfg.setProperty( Environment.USE_QUERY_CACHE, "true" ); cfg.setProperty( Environment.CACHE_REGION_PREFIX, "criteriaquerytest" ); cfg.setProperty( Environment.USE_SECOND_LEVEL_CACHE, "true" ); cfg.setProperty( Environment.GENERATE_STATISTICS, "true" ); } public static Test suite() { return new FunctionalTestClassTestSuite( CriteriaQueryTest.class ); } public void testEscapeCharacter() { Session session = openSession(); Transaction t = session.beginTransaction(); Course c1 = new Course(); c1.setCourseCode( "course-1" ); c1.setDescription( "%1" ); Course c2 = new Course(); c2.setCourseCode( "course-2" ); c2.setDescription( "%2" ); Course c3 = new Course(); c3.setCourseCode( "course-3" ); c3.setDescription( "control" ); session.persist( c1 ); session.persist( c2 ); session.persist( c3 ); session.flush(); session.clear(); // finds all courses which have a description equal to '%1' Course example = new Course(); example.setDescription( "&%1" ); List result = session.createCriteria( Course.class ) .add( Example.create( example ).ignoreCase().enableLike().setEscapeCharacter( new Character( '&' ) ) ) .list(); assertEquals( 1, result.size() ); // finds all courses which contain '%' as the first char in the description example.setDescription( "&%%" ); result = session.createCriteria( Course.class ) .add( Example.create( example ).ignoreCase().enableLike().setEscapeCharacter( new Character( '&' ) ) ) .list(); assertEquals( 2, result.size() ); session.createQuery( "delete Course" ).executeUpdate(); t.commit(); session.close(); } public void testScrollCriteria() { Session session = openSession(); Transaction t = session.beginTransaction(); Course course = new Course(); course.setCourseCode("HIB"); course.setDescription("Hibernate Training"); session.persist(course); session.flush(); session.clear(); ScrollableResults sr = session.createCriteria(Course.class).scroll(); assertTrue( sr.next() ); course = (Course) sr.get(0); assertNotNull(course); sr.close(); session.delete(course); t.commit(); session.close(); } public void testSubselect() { Session session = openSession(); Transaction t = session.beginTransaction(); Course course = new Course(); course.setCourseCode("HIB"); course.setDescription("Hibernate Training"); session.persist(course); Student gavin = new Student(); gavin.setName("Gavin King"); gavin.setStudentNumber(232); session.persist(gavin); Enrolment enrolment2 = new Enrolment(); enrolment2.setCourse(course); enrolment2.setCourseCode(course.getCourseCode()); enrolment2.setSemester((short) 3); enrolment2.setYear((short) 1998); enrolment2.setStudent(gavin); enrolment2.setStudentNumber(gavin.getStudentNumber()); gavin.getEnrolments().add(enrolment2); session.persist(enrolment2); DetachedCriteria dc = DetachedCriteria.forClass(Student.class) .add( Property.forName("studentNumber").eq( new Long(232) ) ) .setProjection( Property.forName("name") ); session.createCriteria(Student.class) .add( Subqueries.propertyEqAll("name", dc) ) .list(); session.createCriteria(Student.class) .add( Subqueries.exists(dc) ) .list(); session.createCriteria(Student.class) .add( Property.forName("name").eqAll(dc) ) .list(); session.createCriteria(Student.class) .add( Subqueries.in("Gavin King", dc) ) .list(); DetachedCriteria dc2 = DetachedCriteria.forClass(Student.class, "st") .add( Property.forName("st.studentNumber").eqProperty("e.studentNumber") ) .setProjection( Property.forName("name") ); session.createCriteria(Enrolment.class, "e") .add( Subqueries.eq("Gavin King", dc2) ) .list(); DetachedCriteria dc3 = DetachedCriteria.forClass(Student.class, "st") .createCriteria("enrolments") .createCriteria("course") .add( Property.forName("description").eq("Hibernate Training") ) .setProjection( Property.forName("st.name") ); session.createCriteria(Enrolment.class, "e") .add( Subqueries.eq("Gavin King", dc3) ) .list(); session.delete(enrolment2); session.delete(gavin); session.delete(course); t.commit(); session.close(); } public void testDetachedCriteria() { DetachedCriteria dc = DetachedCriteria.forClass(Student.class) .add( Property.forName("name").eq("Gavin King") ) .addOrder( Order.asc("studentNumber") ) .setProjection( Property.forName("studentNumber") ); byte[] bytes = SerializationHelper.serialize(dc); dc = (DetachedCriteria) SerializationHelper.deserialize(bytes); Session session = openSession(); Transaction t = session.beginTransaction(); Student gavin = new Student(); gavin.setName("Gavin King"); gavin.setStudentNumber(232); Student bizarroGavin = new Student(); bizarroGavin.setName("Gavin King"); bizarroGavin.setStudentNumber(666); session.persist(bizarroGavin); session.persist(gavin); List result = dc.getExecutableCriteria(session) .setMaxResults(3) .list(); assertEquals( result.size(), 2 ); assertEquals( result.get(0), new Long(232) ); assertEquals( result.get(1), new Long(666) ); session.delete(gavin); session.delete(bizarroGavin); t.commit(); session.close(); } public void testProjectionCache() { Session s = openSession(); Transaction t = s.beginTransaction(); Course course = new Course(); course.setCourseCode("HIB"); course.setDescription("Hibernate Training"); s.save(course); Student gavin = new Student(); gavin.setName("Gavin King"); gavin.setStudentNumber(666); s.save(gavin); Student xam = new Student(); xam.setName("Max Rydahl Andersen"); xam.setStudentNumber(101); s.save(xam); Enrolment enrolment1 = new Enrolment(); enrolment1.setCourse(course); enrolment1.setCourseCode(course.getCourseCode()); enrolment1.setSemester((short) 1); enrolment1.setYear((short) 1999); enrolment1.setStudent(xam); enrolment1.setStudentNumber(xam.getStudentNumber()); xam.getEnrolments().add(enrolment1); s.save(enrolment1); Enrolment enrolment2 = new Enrolment(); enrolment2.setCourse(course); enrolment2.setCourseCode(course.getCourseCode()); enrolment2.setSemester((short) 3); enrolment2.setYear((short) 1998); enrolment2.setStudent(gavin); enrolment2.setStudentNumber(gavin.getStudentNumber()); gavin.getEnrolments().add(enrolment2); s.save(enrolment2); List list = s.createCriteria(Enrolment.class) .createAlias("student", "s") .createAlias("course", "c") .add( Restrictions.isNotEmpty("s.enrolments") ) .setProjection( Projections.projectionList() .add( Projections.property("s.name") ) .add( Projections.property("c.description") ) ) .setCacheable(true) .list(); assertEquals( list.size(), 2 ); assertEquals( ( (Object[]) list.get(0) ).length, 2 ); assertEquals( ( (Object[]) list.get(1) ).length, 2 ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); s.createCriteria(Enrolment.class) .createAlias("student", "s") .createAlias("course", "c") .add( Restrictions.isNotEmpty("s.enrolments") ) .setProjection( Projections.projectionList() .add( Projections.property("s.name") ) .add( Projections.property("c.description") ) ) .setCacheable(true) .list(); assertEquals( list.size(), 2 ); assertEquals( ( (Object[]) list.get(0) ).length, 2 ); assertEquals( ( (Object[]) list.get(1) ).length, 2 ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); s.createCriteria(Enrolment.class) .createAlias("student", "s") .createAlias("course", "c") .add( Restrictions.isNotEmpty("s.enrolments") ) .setProjection( Projections.projectionList() .add( Projections.property("s.name") ) .add( Projections.property("c.description") ) ) .setCacheable(true) .list(); assertEquals( list.size(), 2 ); assertEquals( ( (Object[]) list.get(0) ).length, 2 ); assertEquals( ( (Object[]) list.get(1) ).length, 2 ); s.delete(enrolment1); s.delete(enrolment2); s.delete(course); s.delete(gavin); s.delete(xam); t.commit(); s.close(); } public void testProjections() { Session s = openSession(); Transaction t = s.beginTransaction(); Course course = new Course(); course.setCourseCode("HIB"); course.setDescription("Hibernate Training"); s.save(course); Student gavin = new Student(); gavin.setName("Gavin King"); gavin.setStudentNumber(667); s.save(gavin); Student xam = new Student(); xam.setName("Max Rydahl Andersen"); xam.setStudentNumber(101); s.save(xam); Enrolment enrolment = new Enrolment(); enrolment.setCourse(course); enrolment.setCourseCode(course.getCourseCode()); enrolment.setSemester((short) 1); enrolment.setYear((short) 1999); enrolment.setStudent(xam); enrolment.setStudentNumber(xam.getStudentNumber()); xam.getEnrolments().add(enrolment); s.save(enrolment); enrolment = new Enrolment(); enrolment.setCourse(course); enrolment.setCourseCode(course.getCourseCode()); enrolment.setSemester((short) 3); enrolment.setYear((short) 1998); enrolment.setStudent(gavin); enrolment.setStudentNumber(gavin.getStudentNumber()); gavin.getEnrolments().add(enrolment); s.save(enrolment); //s.flush(); Integer count = (Integer) s.createCriteria(Enrolment.class) .setProjection( Projections.count("studentNumber").setDistinct() ) .uniqueResult(); assertEquals(count, new Integer(2)); Object object = s.createCriteria(Enrolment.class) .setProjection( Projections.projectionList() .add( Projections.count("studentNumber") ) .add( Projections.max("studentNumber") ) .add( Projections.min("studentNumber") ) .add( Projections.avg("studentNumber") ) ) .uniqueResult(); Object[] result = (Object[])object; assertEquals(new Integer(2),result[0]); assertEquals(new Long(667),result[1]); assertEquals(new Long(101),result[2]); assertEquals( 384.0, ( (Double) result[3] ).doubleValue(), 0.01 ); List resultWithMaps = s.createCriteria(Enrolment.class) .setProjection( Projections.distinct( Projections.projectionList() .add( Projections.property("studentNumber"), "stNumber" ) .add( Projections.property("courseCode"), "cCode" ) ) ) .add( Restrictions.gt( "studentNumber", new Long(665) ) ) .add( Restrictions.lt( "studentNumber", new Long(668) ) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -