SELECT count(*) as anzahl, DATE_FORMAT(timeStamp,'%d.%m.%Y') FROM state s
group by DATE_FORMAT(timeStamp,'%d.%m.%Y')
order by DATE_FORMAT(timeStamp,'%d.%m.%Y') asc
timeStamo это колонка в Таблицы State у которой type timestamp.
Используется база MySQL
Как мне его обыграть при помощи Criteria?
вот мапинг класса State
package de.hacon.requests;
import java.io.Serializable;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Type;
@Entity
public class State implements Serializable {
private long id;
private Calendar timeStamp;
private int nrOfUsedCommSocket;
private int jobQueueDepth;
private String clientIp;
private String serverIp;
public State() {
}
public State(Calendar timeStamp, int nrOfUsedCommSocket, int jobQueueDepth, String clientIp, String serverIp) {
super();
this.timeStamp = timeStamp;
this.nrOfUsedCommSocket = nrOfUsedCommSocket;
this.jobQueueDepth = jobQueueDepth;
this.clientIp = clientIp;
this.serverIp = serverIp;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(nullable = false)
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
@Column(nullable = false)
public int getJobQueueDepth() {
return jobQueueDepth;
}
public void setJobQueueDepth(int jobQueueDepth) {
this.jobQueueDepth = jobQueueDepth;
}
@Column(nullable = false)
public int getNrOfUsedCommSocket() {
return nrOfUsedCommSocket;
}
public void setNrOfUsedCommSocket(int nrOfUsedCommSocket) {
this.nrOfUsedCommSocket = nrOfUsedCommSocket;
}
@Column(nullable = false)
public String getServerIp() {
return serverIp;
}
public void setServerIp(String serverIp) {
this.serverIp = serverIp;
}
@Column(name = "timeStamp", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
@Type(type="calendar")
public Calendar getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(Calendar timeStamp) {
this.timeStamp = timeStamp;
}
}
я не совсем правильно выразился, я бы хотел получить количество за все существующие месяцы, но сгруппированный по месяцам.
к примеру август-563, сентябрь-896 и так далее.
в sql это выглядит вот так вот
SELECT count(*) as anzahl, DATE_FORMAT(timeStamp,'%m.%Y') FROM state s
group by DATE_FORMAT(timeStamp,'%m.%Y')
order by timeStamp asc
U>>> calStart.set(1900, Calendar.AUGUST, 1,0,0,0); U>>> calEnd.set(2050, Calendar.AUGUST, 31,0,0,0);
U>я не совсем правильно выразился, я бы хотел получить количество за все существующие месяцы, но сгруппированный по месяцам. U>к примеру август-563, сентябрь-896 и так далее.
U>в sql это выглядит вот так вот
U>
U>SELECT count(*) as anzahl, DATE_FORMAT(timeStamp,'%m.%Y') FROM state s
U>group by DATE_FORMAT(timeStamp,'%m.%Y')
U>order by timeStamp asc
U>
U>но как мне такое же получить через критерии?
Session s = getSession();
String hql =
"SELECT count(*) as anzahl, DATE_FORMAT(timeStamp,'%m.%Y') FROM state s
group by DATE_FORMAT(timeStamp,'%m.%Y')
order by timeStamp asc";
Query q = s.createQuery(hql);
q.setLong("p1",p1);
List<Object[]> result = new ArrayList<Object[]>();
for (Object o : q.list()) {
.......................