2016-04-14 20 views
0

ich die benannte Abfrage ausgeführt unter:NamedQuery optionale Parameter, inkonsistente Datentypen

@NamedQuery(name = Employment.EMPLOYEES, 
       query = "select e from Employmente left join fetch e.person p where" + 
         " e.endDate is not null " + 
         " and (:paramFromDate is null or e.endDate >= :paramFromDate)" + 
         " and (:paramToDate is null or e.endDate <= :paramToDate)") 

wo paramFromDate und paramToDate optional.

Die resultierende Abfrage löst jedoch einen Fehler aus;

Caused by: java.sql.SQLSyntaxErrorException: ORA-00932: inconsistent datatypes: expected DATE got BINARY 

Irgendwelche Vorschläge?

+0

‚: paramFromDate ist null‘ das hat nichts mit Datenbank zu tun, Sie, dass extern überprüfen und kann aus Abfrage ziehen. –

+0

aber: paramFromDate wird bedingt manchmal Null und manchmal einen Wert haben. Wie man damit umgeht> – n1ckgun

Antwort

0

benannte Abfragen sind nicht dynamisch, aber man kann diese Lösung versuchen:

@NamedQuery(name = Employment.EMPLOYEES, query = Employment.NAMED_QUERY) 
@Entity 
public class Employment{ 
    private static String NAMED_QUERY= "default query"; 
    //+your persistent fields/properties... 
} 

public String buildQuery(Date paramFromDate,Date paramToDate){ 

    if(paramFromDate != null){ 
     NAMED_QUERY="your query using paramFromDate param"; 
    } 
    if(paramToDate != null){ 
     NAMED_QUERY="your query using paramToDate param"; 
    } 
} 

//and later in your code 
Employment.buildQuery(paramFromDate,paramToDate); 
TypedQuery<MyEntity> query = entityManager.createQuery(Employment.NAMED_QUERY , Employment.class);