zhrmghg2014 2011-04-13 09:51
浏览 311
已采纳

用Hibernate映射mysql问题(Timestamp)

我知道这个是个常见问题,我已经看了论坛帖子和查阅相关资料,始终没找到好的解决方法,如果有空的帮解答下吧。

SessionInfo.hbm.xml

[code="java"]









[/code]

SessionInfoDao.java

[code="java"]public boolean sessionInfoExists(SessionInfo info) throws RuntimeException {
if (info == null) {
return false;
}

    Session sess = DaoBase.currentSession();
    try {
        String infoEmail = info.getEmail();
        String infoClientIP = info.getClientIP();
        Date infoCreationTime = info.getCreationTime();

        if (infoEmail == null || infoClientIP == null || infoCreationTime == null) {
            return false;
        }

        int diff = Util.diffDays(new Date(), infoCreationTime);
        if (diff < 0 || diff > SessionInfo.COOKIE_MAX_DAYS) {
            return false;
        }

        Query q = sess.createQuery("from SessionInfo where email = :email and clientIP = :clientIP and creationTime =:creationTime")
                .setString("email", infoEmail)
                .setString("clientIP", infoClientIP)

.setStrng("creationTime", infoCreationTime);
Iterator itr = q.iterate();
if (itr.hasNext()) {
return true;

        } else {
            return false;
        }
    } finally {
        DaoBase.closeSession();
    }[/code]

SessionInfoDaoTest.java

[code="java"]@Test
public void testSessionInfoExists() {
SessionInfo info = null;
assertFalse(dao.sessionInfoExists(info));
info = new SessionInfo();
assertFalse(dao.sessionInfoExists(info));
info.setEmail("test@dc.com");
assertFalse(dao.sessionInfoExists(info));
info.setSessionID("123456");
assertFalse(dao.sessionInfoExists(info));
info.setClientIP("192.168.1.1");
assertFalse(dao.sessionInfoExists(info));
info.setCreationTime(new Date());
assertFalse(dao.sessionInfoExists(info));

    info = new SessionInfo();
    info.setEmail("test@dc.com");
    info.setClientIP("192.168.1.1");
    info.setCreationTime(new Date());
    Session sess = reopenSession();
    sess.save(info);
    sess.flush();
    closeSession();
    assertTrue(dao.sessionInfoExists(info));
}[/code]

这里主要是timeStamp的问题,如果我把hql里面的creationTime去掉,即:"from SessionInfo where email = :email and clientIP = :clientIP " 我的测试就没问题,我把它加上后即使转成sqlDate也没用,不知道问题出在哪里?

  • 写回答

1条回答

  • cheng888qi 2011-04-13 11:45
    关注

    [quote]


    [/quote]
    这里映射的是timestamp类型,
    [quote]
    .setString("creationTime", infoCreationTime);

    [/quote]
    肯定不正确,你用下
    [code="java"]
    .setTimestamp("creationTime", infoCreationTime);
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘