Ho una colonna destinata a contenere un timestamp definito con un tipo di dati java.util.Date e memorizzato in un tipo di Oracle DATE nel database. Ho verificato che le informazioni complete su data e ora siano persistenti e recuperate correttamente dal database, ma quando provo a confrontarle in un NamedQuery, le informazioni sull'ora non vengono prese in considerazione nel confronto.JPA: Confronto di data/ora in NamedQuery: dati di tempo persi
La colonna è definito come segue (analyzeDate è di tipo java.util.Date):
@Basic(optional = false)
@Column(name = "ANALYZE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date analyzeDate;
E il mio NamedQuery:
@NamedQuery(name = "BOADocument.findByBeforeAnalyzeDate",
query = "SELECT b FROM BOADocument b WHERE b.companyId = :companyId AND b.analyzeDate < :analyzeDate")
che ho poi eseguo, passando analyzeDate che è di digita java.util.Date:
List<BOADocument> docs = em.createNamedQuery("BOADocument.findByBeforeAnalyzeDate")
.setParameter("companyId", clientRecord)
.setParameter("analyzeDate", analyzeDate, TemporalType.TIMESTAMP)
.getResultList()
Ritorna un elenco di tutte le righe nella tabella Documento , sebbene abbiano tutti esattamente lo stesso valore per analyzeDate come il valore che ho impostato come parametro per NamedQuery.
Se inverso il confronto, non ottengo linee, ulteriormente convincendomi che la porzione temporale del timestamp si sta perdendo sul lato b.analyzeDate delle cose, non sul lato: analizza Data.
Sto utilizzando JPA 1.0 con Hibernate 3.5.
Questo mi ostacola, e sono vicino a rinunciare e usare una query nativa, ma mi sembra di imbrogliare!
Potrebbe essere un problema di millisecondi, controllare il loro valore nei parametri e nei valori del database. – remigio
Poiché il tipo di colonna nel database Oracle è DATE, non vi sono informazioni millisecondo memorizzate. Le informazioni del millisecondo sono presenti nel lato java.util.Date, quindi ho controllato (confrontando sia Date.getTime()) sia il valore che ho inserito e i valori che ottengo dalle mie entità sono identici. Ancora stumped ... – emilys