使用hibernate的criteria分页查询后得到数组对象
2014-06-20 14:50
495 查看
前几日使用了hibernate的级联查询,使用注解方式添加如下
通过hibernate的criteria分页查询GzhMaterial后得到数组对象,代码如下,第一段代码
这里得到的结果records竟然不是GzhMaterial对象列表,而是一个对象数组,这两个数组分别是,GzhMaterial和SysUser,其中GzhMaterial对象包含了SysUser对象,没有仔细研究,后来遍历了这个数组然后取出需要的对象
最近又做了一个查询这次代码是这样子的第二段代码
想不通啊,后来去网上找了一个资料
http://blog.sina.com.cn/s/blog_5f8a2acc0101e8xu.html
里面提到了
或许第一段代码中没有增加这句转换导致了查询出来的是数组对象,而第二段代码,中并没有uniqueResult();操作所以查询出来的是对象列表
import java.sql.Timestamp; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import javax.persistence.Table; import com.yongle.system.bean.SysUser; @Entity @Table(name = "gzh_material") public class GzhMaterial { private long id; private String name; private String type; private String content; private String title; private String description; private String musicUrl; private String hqMusicUrl; private String mediaId; private Timestamp uploadTime; private String cate; private String isNeedBind; private long interfaceId; private String interfaceParam; private SysUser user; private Timestamp createTime; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") public long getId() { return id; } public void setId(long id) { this.id = id; } @Column(name = "name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name = "type") public String getType() { return type; } public void setType(String type) { this.type = type; } @Column(name = "content") public String getContent() { return content; } public void setContent(String content) { this.content = content; } @Column(name = "title") public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } @Column(name = "description") public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Column(name = "music_url") public String getMusicUrl() { return musicUrl; } public void setMusicUrl(String musicUrl) { this.musicUrl = musicUrl; } @Column(name = "hq_music_url") public String getHqMusicUrl() { return hqMusicUrl; } public void setHqMusicUrl(String hqMusicUrl) { this.hqMusicUrl = hqMusicUrl; } @Column(name = "media_id") public String getMediaId() { return mediaId; } public void setMediaId(String mediaId) { this.mediaId = mediaId; } @Column(name = "upload_time") public Timestamp getUploadTime() { return uploadTime; } public void setUploadTime(Timestamp uploadTime) { this.uploadTime = uploadTime; } @Column(name = "cate") public String getCate() { return cate; } public void setCate(String cate) { this.cate = cate; } @Column(name = "is_need_bind") public String getIsNeedBind() { return isNeedBind; } public void setIsNeedBind(String isNeedBind) { this.isNeedBind = isNeedBind; } @Column(name = "interface_id") public long getInterfaceId() { return interfaceId; } public void setInterfaceId(long interfaceId) { this.interfaceId = interfaceId; } @Column(name = "interface_param") public String getInterfaceParam() { return interfaceParam; } public void setInterfaceParam(String interfaceParam) { this.interfaceParam = interfaceParam; } @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "user_id") public SysUser getUser() { return user; } public void setUser(SysUser user) { this.user = user; } @Column(name = "create_time") public Timestamp getCreateTime() { return createTime; } public void setCreateTime(Timestamp createTime) { this.createTime = createTime; } }
import java.sql.Timestamp; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "sys_user") public class SysUser { private long id; private String code; private String name; private String pwd; private String isEnabled; private Timestamp registerDate; private String loginUrl; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") public long getId() { return id; } public void setId(long id) { this.id = id; } @Column(name = "code") public String getCode() { return code; } public void setCode(String code) { this.code = code; } @Column(name = "name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name = "pwd") public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Column(name = "is_enabled") public String getIsEnabled() { return isEnabled; } public void setIsEnabled(String isEnabled) { this.isEnabled = isEnabled; } @Column(name = "register_date") public Timestamp getRegisterDate() { return registerDate; } public void setRegisterDate(Timestamp registerDate) { this.registerDate = registerDate; } @Column(name = "login_url") public String getLoginUrl() { return loginUrl; } public void setLoginUrl(String loginUrl) { this.loginUrl = loginUrl; } }
通过hibernate的criteria分页查询GzhMaterial后得到数组对象,代码如下,第一段代码
public Page<GzhMaterial> findAllByPage( Page<GzhMaterial> page, Criterion... criterions) { Session session = getHibernateTemplate().getSessionFactory() .getCurrentSession(); Criteria criteria = session .createCriteria(GzhMaterial.class); if (criterions != null) { for (Criterion criterion : criterions) { if (criterion != null) { criteria.add(criterion); } } } Order order = null; if (!StringUtils.isEmpty(page.getDirection()) && !StringUtils.isEmpty(page.getField())) { if (page.getDirection().equalsIgnoreCase("ASC")) { order = Order.asc(page.getField()); } else { order = Order.desc(page.getField()); } } if (order != null) { criteria.addOrder(order); } long totalCount = (Long) criteria.setProjection(Projections.rowCount()) .uniqueResult(); criteria.setProjection(null); criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); criteria.setFirstResult(page.getStart()); criteria.setMaxResults(page.getLimit()); List<GzhMaterial> records = criteria.list(); page.setTotalCount(totalCount); page.setRecords(records); return page; }
这里得到的结果records竟然不是GzhMaterial对象列表,而是一个对象数组,这两个数组分别是,GzhMaterial和SysUser,其中GzhMaterial对象包含了SysUser对象,没有仔细研究,后来遍历了这个数组然后取出需要的对象
最近又做了一个查询这次代码是这样子的第二段代码
public List<GzhMaterial> findByCondition(Criterion... criterions) { Criteria criteria = getHibernateTemplate().getSessionFactory() .getCurrentSession().createCriteria(GzhMaterial.class); if (criterions != null) { for (Criterion criterion : criterions) { if (criterion != null) { criteria.add(criterion);// 加入查询条件 } } } Order order = Order.desc("name"); criteria.addOrder(order);// 排序 List<GzhMaterial> list = criteria.list(); return list; }神奇的事情出现了,这里的list竟然是GzhMaterial对象列表,里面也是包含了SysUser对象
想不通啊,后来去网上找了一个资料
http://blog.sina.com.cn/s/blog_5f8a2acc0101e8xu.html
里面提到了
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);//设置查询结果为实体对象,
或许第一段代码中没有增加这句转换导致了查询出来的是数组对象,而第二段代码,中并没有uniqueResult();操作所以查询出来的是对象列表
相关文章推荐
- 灵活使用Hibernate的查询对象DetachedCriteria
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- 灵活使用Hibernate的查询对象DetachedCriteria
- (hibernate查询)DetachedCriteria对象创建可以不需要使用session去创建
- 使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集
- 灵活使用Hibernate的查询对象DetachedCriteria
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
- Hibernate查询(主键,对象导航,HQL,Criteria,SQLQuery,分页)
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- 使用hibernate的Criteria来动态改变对象关联方式
- 应用Hibernate3的DetachedCriteria实现分页查询
- Hibernate的查询 标准(Criteria)查询 分页、单个记录、排序
- Hibernate 使用 SQL 查询时报错 “对象名 XX 无效”的解决办法
- 用hibernate 多表联合查询时每条记录返回的都是个对象数组
- Hibernate中Criteria的使用(条件查询)
- Hibernate使用Criteria实现查询
- Hibernate用Criteria查询时使用Distinct方法去除重复数据
- Hibernate 使用 SQL 查询时报错 “对象名 XX 无效”的解决办法
- 使用 HibernateTemplate 实现分页查询 (HibernateCallback接口)
- 使用 HibernateTemplate 实现分页查询 (HibernateCallback接口)