类的关系如下:
public class Object1 {
private Object2 object2;
private Object3 object3;
private String name;
public Object1() {
}
public Object1(Object2 object2, Object3 object3, String name) {
this.object2 = object2;
this.object3 = object3;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object2 getObject2() {
return object2;
}
public void setObject2(Object2 object2) {
this.object2 = object2;
}
public Object3 getObject3() {
return object3;
}
public void setObject3(Object3 object3) {
this.object3 = object3;
}
}
/****************************************************************/
public class Object2 {
private String name;
public Object2() {
}
public Object2(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/***************************************************************/
public class Object3 {
private String name;
private Object4 object4;
public Object3() {
}
public Object3(String name,Object4 object4) {
this.name = name;
this.object4=object4;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object4 getObject4() {
return object4;
}
public void setObject4(Object4 object4) {
this.object4 = object4;
}
}
/*************************************************/
public class Object4 {
private String name;
public Object4() {
}
public Object4(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
具体的操作方法:
public Map<String, Object> queryObjectByCriteria(Object1 object1,
int start, int limit) {
Map<String, Object> map = new HashMap<String, Object>();
try {
Criteria criteria = this.getSession().createCriteria(Object1.class);
if (object1 != null) {
if (object1.getObject2() != null) {
criteria.add(Restrictions.gt("object2.name", "object2"));
}
if (object1.getObject3() != null) {
// 将criteria扩展到Object3这一级别
criteria = criteria.createCriteria("object3");
if (object1.getObject3().getName() != null) {
if (!object1.getObject3().getName().equals("")) {
criteria.add(Restrictions.eq("name", object1
.getObject3().getName()));
}
}
if (object1.getObject3().getObject4() != null) {
if (!object1.getObject3().getObject4().getName()
.equals("")) {
criteria.add(Restrictions
.eq("object4.name", object1.getObject3()
.getObject4().getName()));
}
}
}
}
// 得到总记录条数
Integer i = (Integer) criteria
.setProjection(Projections.rowCount()).uniqueResult();
Long totalResults = Integer.valueOf(i).longValue();
map.put("count", totalResults);
criteria.setProjection(null);
criteria
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
// 设置分页
criteria.setFirstResult(start);
criteria.setMaxResults(limit);
List list = criteria.list();
map.put("items", list);
return map;
} catch (RuntimeException re) {
throw re;
}
}