2017-11-08 5 views
0

Ich habe ein Java-Projekt, das eine Entität mit einer LocalDateTime enthält. Ich möchte Datensätze über SQL extrahieren, wobei die LocalDateTime zwischen zwei anderen LocalDateTime liegt.JPA LocalDateTime Vergleich SQL

ENTITY

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(nullable = false) 
private long id; 

@Basic(optional = false) 
@Column(nullable = false) 
private long assignmentId; 

@Basic(optional = false) 
@Column(nullable = false) 
private LocalDateTime startDateTime; 

@Basic(optional = false) 
@Column(nullable = false) 
private LocalDateTime endDateTime; 

JAVA

//Sub assignments 
public List<Subassignment> findAllSubassignmentsForAssignmentBetweenDates(long id, LocalDateTime startDateTime, LocalDateTime endDateTime) { 
    return getEntityManager().createNamedQuery("ResourceVO.findByAssignmentIdAndDates", Subassignment.class) 
      .setParameter("id", id) 
      .setParameter("sdt", startDateTime) 
      .setParameter("edt", endDateTime) 
      .getResultList(); 
} 

QUERY

<named-query name='ResourceVO.findByAssignmentIdAndDates'> 
    <query>   
     SELECT c FROM Subassignment AS c 
     WHERE (c.assignmentId IN (SELECT b.id FROM Assignment b WHERE b.resource.id = :id)) 
     AND (c.startDateTime BETWEEN :sdt AND :edt) 

    </query> 
</named-query> 

ich immer bin immer ein ‚Internal Serve r Fehler '. Irgendwelche Tipps oder Vorschläge?

P.S. Die Abfrage funktioniert problemlos ohne die LocalDateTime-Parameter.

Dank

Matthijs

+0

jede Ausnahme eine Stack-Trace hat, und eine Ursache. Jede Abfrage schlägt entweder vor der Ausführung fehl oder schlägt mit der Ausführung fehl. In diesem Fall würde sie die aufgerufene SQL protokollieren ... – DN1

+0

Sie können LocalDateTime nicht einfach in einer SQL-Abfrage verwenden. Sie müssen es in java.sql.date konvertieren, damit es funktioniert. Vielleicht würde ein normales Datum auch funktionieren, aber ich bin mir da nicht sicher. –

+0

Aber kann ich sie mit den LocalDateTime vergleichen? –

Antwort

0

Ich änderte Local zu lange