2016-04-14 14 views
0

私は下の名前のクエリを実行しています:paramFromDateとparamToDateはオプションですNamedQueryオプションのパラメータ、一貫性のないデータ型

@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)") 

しかし、結果のクエリはエラーをスローします。

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

お勧めはありますか?

+0

を「:paramFromDateはnullである」、あなたは外部からのことを確認することができます&クエリの外に引き出すことができ、これはデータベースとは何の関係もありません。 –

+0

しかし、:paramFromDateは条件付きでnullになり、時には値を持つことがあります。それをどう扱うか> – n1ckgun

答えて

0

という名前のクエリは、動的ではありませんが、あなたはこのソリューション試すことができます。

@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); 
関連する問題