interrogazione Data con Hibernate sul Timestamp Column in PostgreSQL
-
23-09-2019 - |
Domanda
Una tabella ha colonna timestamp. Un valore del campione in quanto potrebbe essere 2010-03-30 13:42:42. Con Hibernate, sto facendo una domanda Restrictions.between gamma ( "nome-colonna", fromdate, todate).
La mappatura Hibernate per questa colonna è la seguente.
<property name="orderTimestamp" column="order_timestamp" type="java.util.Date" />
Diciamo, voglio scoprire tutti i record che hanno la data 30 marzo 2010 e il 31 marzo 2010. Una query gamma su questo campo è fatto come segue.
Date fromDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-03-30");
Date toDate = new SimpleDateFormat("yyyy-MM-dd").parse("2008-03-31");
Expression.between("orderTimestamp", fromDate, toDate);
Questo non funziona.
L'interrogazione viene convertita rispettivi timestamp come "2010-03-30 00:00:00" e "2010-03-31 00:00:00". Così, tutti i record per il 31 marzo 2010 vengono ignorate.
Una semplice soluzione a questo problema potrebbe essere quella di avere la data di fine come "2010-03-31 23:59:59". Ma, vorrei sapere se c'è modo di corrispondere solo la parte data della colonna timestamp.
Inoltre, è Expression.between()
comprensivo di entrambi i limiti? La documentazione non getta luce su questo.
Nessuna soluzione corretta
Altri suggerimenti
, vorrei sapere se c'è modo di corrispondere solo la parte data della colonna timestamp.
Se non si desidera un TIMESTAMP, utilizzare una data (e non si dovrebbe utilizzare type="date"
?).
Inoltre, è Expression.between () comprensivo di entrambi i limiti?
Sembra che il comportamento del SQL TRA operatore banca dati dipendono . Con PosgreSQL, l'TRA espressione:
x BETWEEN y AND z
è semanticamente equivalente a:
y <= x AND x <= z
vale a dire. compreso.
Il "2010-03-31 23:59:59". condizione di confine è potenzialmente pericolosa: se ci fosse una transazione nel sistema 23:59:59-00:00:00, devi perdere. Se avete abbastanza transazioni al giorno e un periodo abbastanza lungo, un rapporto sta per rompere e si spenderà ore per scoprire perché.
between href="http://www.java2s.com/Code/PostgreSQL/Select-Query/UsingBETWEEN.htm" rel="nofollow noreferrer"> comprende i limiti quindi non sarebbe anche essere sicuri di impostare la data di fine per 2010-04-01 00:00:00. Utilizzare lt () e GT () per essere sicuri.
Forse si può lanciare orderTimestamp a una data. HQL ha supporto per questo.
Utilizzare cast (your_data, data), ricorda il secondo arg della funzione di fusione deve essere inferiore, o non funzionerà.
Att .: Samuel \ Maycon