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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top