2010-04-22 12 views
5

Mam kwerendy HQL:Parse HQL do struktury AST i konwertować AST powrotem do HQL

query = select item.itemNumber from items item where item.stock>0 and item.price<100.00 

Lubię analizować tej kwerendy i przekształcić go w strukturze drzewa:

AST queryTree = parse(query); 

niż ja lubię iterować przez węzły, zmieniać niektóre wartości i konwertować drzewo z powrotem na reprezentację ciągów:

Iterator<ASTNode> it = queryTree.nodeIterator(); 
while(it.hasNext()) 
{ 
    ASTNode node = it.next(); 
    System.out.println(node.text() + "->" + node.value()); 
} 
query = queryTree.toString(); 

byłoby miło, gdyby t metoda parsowania wyrzuciłaby wyjątki na wypadek naruszenia gramatyki HQL, ale nie jest to konieczne. Czy ktoś ma pomysł, jak to osiągnąć? Czy istnieją jakieś metody API oferowane przez hibernację do wykonania tego zadania?

Dzięki,

Odpowiedz