2013-08-29 51 views
1

如何創建謂詞的(人類可讀)字符串表示,這說明我的邏輯操作數AND/OR/NOT還有屬性和參數佔位符?JPA標準API:如何轉儲一個人類可讀表示謂詞

不需要進行SQL或平臺特定的轉換。

問候

+0

這確實一個相當不錯的工作用的EclipseLink提供者:((SelectionImpl )predicate).getCurrentNode()。toString() –

回答

1

這工作正常,我用的EclipseLink 2.3/2.4:

import org.eclipse.persistence.internal.jpa.querydef.SelectionImpl; 

public static String getPredicateAsString(final Predicate predicate) { 
    if (predicate == null) { 
     return null; 
    } 
    if (!(predicate instanceof SelectionImpl<?>)) { // type guard 
     return "not supported"; 
    } 

    return ((SelectionImpl<?>) predicate).getCurrentNode().toString(); 
} 

示例輸出getPredicateAsString

Logical operator [ AND ] 
    Relation operator [ <> ] 
     Query Key age 
      Base model.Person 
     Constant 42 
    Function operator [(, IS NOT NULL)] 
     Query Key currentJob 
      Base model.Employer