Hibernate, помогите составить Criteria.
От: unkis  
Дата: 15.05.07 08:58
Оценка:
Ребята есть такой sql запрос

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;
    }
    
    
    
}
Re: Hibernate, помогите составить Criteria.
От: unkis  
Дата: 15.05.07 12:09
Оценка:
пытаюсь сделать что-то типа такого
Calendar calStart = new GregorianCalendar();
            Calendar calEnd =  new GregorianCalendar();
            calStart.set(2005, Calendar.AUGUST, 1,0,0,0);
            calEnd.set(2005, Calendar.AUGUST, 31,0,0,0);
            Criteria crit = entityManager.createCriteria(State.class);
            crit.add(Restrictions.between("timeStamp", calStart,calEnd));
            crit.setProjection(Projections.rowCount() );            
            List results = crit.list();

но это к примеру только за Август, а как мне сделать чтобы вывел количество за все существующие месяцы?
Re[2]: Hibernate, помогите составить Criteria.
От: pvnic  
Дата: 16.05.07 03:32
Оценка:
Здравствуйте, unkis, Вы писали:


U>но это к примеру только за Август, а как мне сделать чтобы вывел количество за все существующие месяцы?



U> calStart.set(1900, Calendar.AUGUST, 1,0,0,0);

U> calEnd.set(2050, Calendar.AUGUST, 31,0,0,0);
Re[3]: Hibernate, помогите составить Criteria.
От: unkis  
Дата: 17.05.07 11:16
Оценка:
U>> calStart.set(1900, Calendar.AUGUST, 1,0,0,0);
U>> calEnd.set(2050, Calendar.AUGUST, 31,0,0,0);

я не совсем правильно выразился, я бы хотел получить количество за все существующие месяцы, но сгруппированный по месяцам.
к примеру август-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


но как мне такое же получить через критерии?
Re[4]: Hibernate, помогите составить Criteria.
От: pvnic  
Дата: 18.05.07 12:27
Оценка:
Здравствуйте, unkis, Вы писали:


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()) {
.......................
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.