2014-07-11 165 views
1

我有一个MySQL查询,我想将这个查询转换为Hibernate查询。这是我到目前为止尝试过的。将mysql查询转换为hibernate查询

userInQuery = "SELECT * FROM log where userName in("; 
userCountQuery = "SELECT count(*) FROM log where userName in("; 

for (int i = 0; i < users.length; i++) { 
    userInQuery += "'" + users[i] + "',"; 
    userCountQuery += "'" + users[i] + "',"; 
} 

userInQuery = userInQuery.substring(0, userInQuery.lastIndexOf(","))+ ") and 
    systemdate >= STR_TO_DATE('" + fromDt+ "' ,'%Y-%m-%d') and systemdate <= 
    STR_TO_DATE('"+ toDate + "','%Y-%m-%d')"; 

userCountQuery = userCountQuery.substring(0, userCountQuery.lastIndexOf(","))+ ") 
    and systemdate >= STR_TO_DATE('"+ fromDt+ "' ,'%Y-%m-%d') and systemdate <= 
    STR_TO_DATE('"+ toDate + "','%Y-%m-%d')"; 

//System.out.println("Final userInQuery : " + userInQuery); 

psmt = conn.prepareStatement(userInQuery); 

rscount = stmt.executeQuery(userCountQuery); 
+0

给你的MySQL查询,以获取有关什么ü[R问清晰的概念。 – OO7

+0

@ user000324我想问如何在查询和STR_TO_DATE在休眠 – user3441816

回答

1

使用Hibernate查询:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY"); 
String fromDate = "11-07-2014"; 
Date fromDt = formatter.parse(fromDate); 
String toDate = "11-07-2014"; 
Date toDt = formatter.parse(toDate); 

String userInQuery = "from log where userName in (:userList) and systemdate between :fromDate and :toDate"; 
Query q = s.createQuery(userInQuery); 
q.setParameterList("usersList", users); 
q.setParameter("fromDate", fromDt); 
q.setParameter("toDate", toDt); 
q.list(); 

注:这里:用户列表,:FROM日期&:TODATE是查询参数。

使用Hibernate标准:

List<?> users = //get data from either a query or criteria 
criteria.add(Restrictions.and(Restrictions.in("userList", users),Restrictions.between("dateField", new SimpleDateFormat("dd-MM-YYYY").parse(fromDate), new SimpleDateFormat("dd-MM-YYYY").parse(toDate))); 

OR 

criteria.add(Restrictions.in("userList", users)); 
criteria.add(Restrictions.ge("systemDate", fromDt)); 
criteria.add(Restrictions.lt("systemDate", toDt)); 
+0

谢谢reply.but我得到这个异常“13:38:57,282错误[STDERR] java.lang.IllegalArgumentException:非法模式字符'Y' 13: 38:57,285错误[STDERR] \t at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:752) 13:38:57,286错误[STDERR] \t at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:559)“ – user3441816

+0

如果你使用** jdk 1.6 **然后使用(小写)** y ** [SimpleDateFormat - JDK1.6](http://docs.oracle.com/javase/6/docs/api/java/text/ SimpleDateFormat.html)。使用** JDK 1.7 **您可以使用上述格式[SimpleDateFormat - JDK1.7](http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) – OO7

+0

Log其中userName在(:userList)和systemdate:fromDate和:toDate之间。 这个查询返回null? – user3441816

0

创建一个与您的情况相同的用户标识列表,并将该列表传递给下面的查询。

类似下面

Select x FROM X x WHERE x.y in :yList