您的位置:首页 > 其它

使用hibernate的criteria分页查询后得到数组对象

2014-06-20 14:50 495 查看
前几日使用了hibernate的级联查询,使用注解方式添加如下

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();操作所以查询出来的是对象列表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐