2016-04-01 6 views
0

私は特定の日にeveryloginの時間を表示したいですが、毎回の日付と時刻を取得します。同様すべてのlogintimeを持つ日付でグループ化するHibernateクエリ

result is:- 
date   logintime   
2016-03-31  2016-03-31 (time) 
2016-03-31  2016-03-31 (time) 
2016-03-31  2016-03-31 (time) 

But I want:- 

date    logintime 
2016-03-31   2016-03-31 (time) 
        2016-03-31 (time) 
        2016-03-31 (time) 

USERDAOのCLASS:

public List<LoginLog> UserHistory(User user){ 

    String sql="from LoginLog where user = :user"; 
    TypedQuery<LoginLog> query = em.createQuery(sql, LoginLog.class); 
    query.setParameter("user", user); 

    List<LoginLog> logs = query.getResultList(); 
    return logs; 
} 

DEFAULT_USER CLASS

@Override 
    @Transactional 
    public LoginLog punchLoginTime(User user) { 
    LoginLog log = new LoginLog(); 
    log.setLoginTime(new Date()); 
    log.setUser(user); 
    loginLogDao.create(log); 
    return log; 
} 

@Override 
@Transactional 
public LoginLog punchLogoutTime(User user) { 
    LoginLog log = getOpenUserLoginLog(user); 
    log.setLogoutTime(new Date()); 
    long diff=log.getLogoutTime().getTime()-log.getLoginTime().getTime(); 
    log.setTotalTime(diff); 
    log = loginLogDao.update(log); 
    return log; 
} 

@Override 
public boolean hasUserStarted(User user) { 
    LoginLog log = loginLogDao.getOpenLoginLog(user); 

    if (log == null) { 
     return false; 
    } else { 
     return true; 
    } 
} 

@Override 
public LoginLog getOpenUserLoginLog(User user) { 
    return loginLogDao.getOpenLoginLog(user); 
} 

@Override 
public List<LoginLog> UserHistroy(User user) { 
    return loginLogDao.UserHistory(user); 
} 

LOGIN_CONTROLLERのCLASS

@RequestMapping(value = "/userloginhistory", method = { RequestMethod.GET }) 
    public String loginHistory(HttpServletRequest request, Model model) { 

    List<LoginLog> logs = userService.UserHistroy(TimesheetSecutiryUtil 
      .getLoggedInUser(request.getSession())); 
    model.addAttribute("loginList", logs); 
    return "userloginhistory"; 

} 

は、これは誰でも教えてくださいすることができます私はこれに新しいですJsp.Asです私はどうすればいいの?(e Hibernateのクエリによって、またはJSPレベルで、どのようither?)Guavaを使用すると、簡単にmulti mapList<LoginLog>を変換し、JSPファイルが利用できるようImmutableListMultimapを返すことができるオプションであれば、あなたに

<table border="1"> 
    <thead> 
    <tr> 
     <td>Login Id</td> 
     <td>Login Time</td> 
     <td>Logout Time</td> 
     <td>Total Time(in Minutes)</td> 
     </tr> 
    </thead> 
<% 
    List<LoginLog> log = (List<LoginLog>)request.getAttribute("loginList"); 
    if(log != null) { 
     for(LoginLog login : log) { 
%> 
<tr> 
<td><%=login.getId()%></td> 
<td><%=login.getLoginTime()%></td> 
<td><%=login.getLogoutTime()%></td> 
<td id="a<%=login.getId()%>"> 
    <span id="time<%=login.getId()%>"> 
    <%=login.getTotalTime()%></span> <script> 
    var milliSeconds = document.getElementById("time<%=login.getId()%>").innerHTML; 
    var c = convertTime(milliSeconds); 
    document.getElementById("a<%=login.getId()%>").innerHTML = c; 
    </script></td> 
</tr> 
<% 
    } 
} 
%> 
</table> 

答えて

0

ありがとうございます。例えば、

private static class LoginLog { 
    private Date loginTime; 
    private Date logoutTime; 

    LoginLog(Date loginTime) { 
     this.loginTime = loginTime 
    } 
    // Getters and setters 
} 

とグループ化機能、

private enum GroupBy implements Function<LoginLog, String> { 
    LOGIN_TIME 

    @Override 
    String apply(LoginLog loginLog) { 
     return new SimpleDateFormat("yyyy-MM-dd").format(loginLog.loginTime) 
    } 
} 

index方法

ImmutableListMultimap<String, LoginLog> listMultimap = Multimaps.index(logs, GroupBy.LOGIN_TIME); 

を使用して、私はあなたがマルチで提供されるものに類似した出力を得ることができるとは思いません純粋なHQLクエリを使ってマップすると、やっている通りにすべての結果を得る必要があります

List<LoginLog> logs = query.getResultList(); 

同様のマップデータ構造は、logsリストをループすることによって生成することもできます。

関連する問題