发新话题
打印

[Hibernate] 日期查询问题

日期查询问题

前段时间做项目,遇到oracle的时间问题头疼了2天,插入时间没有精确到秒,最后问题还是解决,但是什么原因还是不解。  ~( O7 T7 D$ ?
oracle数据库时间字段为Date类型,Hibernate中映射字段类型为java.sql.Timestamp,PO中则为java.util.Date不变,
- d0 @0 F, N4 `4 `# H插入时间用new java.sql.Date(new java.util.Date().getTime()),数据库插入的时间没有问题,但是取的时候时间后面却又多了个毫秒,而且值为0,不知何解,要是在重新格式化成String又显示成英文格式的时间。。。。+ R. [2 V4 E' s' }2 V. g
最后不得已用<fmt:formatDate value="${}" type="both"/>解决了问题,原因不明!
& C" v/ w+ e! y6 {* \) `/ Z5 L' W. ~  m0 M
还有一点需要注意的是formbean上来的数据都是String型,会造成类型不匹配的异常,需要增加个get/set方法
复制内容到剪贴板
代码:
private String savedate;
public String getSavedate() {
  java.text.DateFormat dateFormat =new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(this.savedate);                 
}

public void setSavedate(String savedate) throws ParseException {
  java.text.DateFormat dateFormat =new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  this.createtime = dateFormat.parse(savedate);
}
createtime为需要转换的时间,这里简化了下。6 k6 W2 s- J! n

$ U  q3 w, R5 f3 G$ ?DetachedCriteria时间查询6 ?9 P- C! ]/ m9 O& k( C: M
action中:
复制内容到剪贴板
代码:
DetachedCriteria detachedCriteria = DetachedCriteria  .forClass(Log.class);   
  
String startTime = request.getParameter("startTime");   
            String endTime = request.getParameter("endTime");   
            if (startTime != null && endTime != null && startTime.length()>0 && endTime.length()>0) {   
               if (Tools.isValidDate(startTime) && Tools.isValidDate(endTime)) {   
                    if (Tools.before(startTime, endTime)) {   
                       detachedCriteria.add(Restrictions.between("actTime",   
                                Tools.convertStringToDate(startTime), Tools   
                                        .convertStringToDate(endTime)));   
                    } else {   
                        throw new RuntimeException("开始时间不能在结束时间之前!");   
                    }   
                } else {   
                    throw new RuntimeException("日志记录时间不符合规定的格式!");   
                }   
            }   
Page page = logService.listSearchLog(pageno, rowsize, orderby,   
                    isReserve, detachedCriteria);   
daoimp代码如下:
复制内容到剪贴板
代码:
public Page listSearchLog(final int pageno, final int rowsize,   
            final String orderby, final boolean isReserve,   
            final DetachedCriteria detachedCriteria)   
            throws DataAccessException, HibernateException {   
        return (Page) getHibernateTemplate().execute(new HibernateCallback() {   
            public Object doInHibernate(Session session)   
                    throws HibernateException {   
                Page page = null;   
                Criteria criteria = detachedCriteria   
                        .getExecutableCriteria(session);   
                int total = ((Integer) criteria.setProjection(   
                        Projections.rowCount()).uniqueResult()).intValue();   
                System.out.println("查询用户符合条件的数目为:" + total);   
                criteria.setProjection(null);   
  
                if (total > 0) {   
                    page = new Page();   
                    page.setRowsize(rowsize);   
                    page.setPageno(pageno);   
                    page.setTotalrows(total);   
                    page.excecute();   
  
                    Criteria result = criteria.setFirstResult(page.getStart())   
                            .setMaxResults(page.getRowsize());   
  
                    if (orderby != null && orderby.length() > 0) {   
                        if (isReserve) {   
                            result = result.addOrder(Order.desc(orderby));   
                        } else {   
                            result = result.addOrder(Order.asc(orderby));   
                        }   
                    }   
                    List resultList = new ArrayList();   
                    Log log = null;   
                    for (java.util.Iterator it = result.list().iterator(); it   
                            .hasNext();) {   
                        Object[] m = (Object[]) it.next();   
                        if (m.length == 3) {   
                            log = (Log) m[2];   
                        }   
                        if (m.length == 4)   
                            log = (Log) m[3];   
  
                        resultList.add(log);   
  
                    }   
                    page.setList(resultList);   
  
                }   
  
                if (page == null) {   
                    page = Page.getEmptyPage();   
                }   
                return page;   
            }   
        }, true);   
  
    }  
发新话题
查看积分策略说明

快速回复主题

选项

[完成后可按 Ctrl+Enter 发布] 预览帖子 恢复数据 清空内容