📄 criteriaquerytest.java
字号:
//$Id: CriteriaQueryTest.java,v 1.23 2005/02/21 14:40:58 oneovthafew Exp $package org.hibernate.test.criteria;import java.util.List;import java.util.Map;import junit.framework.Test;import junit.framework.TestSuite;import org.hibernate.Criteria;import org.hibernate.FetchMode;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Expression;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.dialect.HSQLDialect;import org.hibernate.test.TestCase;import org.hibernate.transform.AliasToBeanResultTransformer;import org.hibernate.type.Type;import org.hibernate.util.SerializationHelper;/** * @author Gavin King */public class CriteriaQueryTest extends TestCase { public CriteriaQueryTest(String str) { super(str); } public void testSubselect() { if ( getDialect() instanceof HSQLDialect ) return; 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(); //TODO: join in subselect /*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") ) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -