2010-04-22 32 views
5

Tôi có một truy vấn HQL:Parse HQL để cấu AST và chuyển đổi AST trở lại HQL

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

tôi muốn phân tích truy vấn này và chuyển đổi nó thành một cấu trúc cây:

AST queryTree = parse(query); 

hơn tôi muốn lặp qua các nút, thay đổi một số giá trị và chuyển đổi cây trở lại một chuỗi represenation:

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

nó sẽ là tốt đẹp nếu t phương pháp phân tích cú pháp của anh ta sẽ ném ngoại lệ trong trường hợp ngữ pháp HQL bị vi phạm, nhưng nó không cần thiết. Có ai có ý tưởng làm thế nào điều này có thể được thực hiện? Có bất kỳ phương pháp API nào được cung cấp bởi hibernate để thực hiện tác vụ đó không?

Cảm ơn,

Trả lời