【Java开源代码栏目提醒】:以下是网学会员为您推荐的Java开源代码-CriteriaQueryTest.java,希望本篇文章对您学习有所帮助。
//$Id: CriteriaQueryTest.java 9117 2006-01-23 21:23:09Z steveebersole $
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.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.*;
import org.hibernate.dialect.HSQLDialect;
import org.hibernate.test.TestCase;
import org.hibernate.test.hql.Reptile;
import org.hibernate.test.hql.Animal;
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 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();
//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.
上一篇:
CriteriaQuery.java
下一篇:
四季相伴,文字生香