お世話になります。 青野と申します。
ソースを見てて気になったのでメールいたします。
ComplexWhere w = new ComplexWhere();
w.and(new ComplexWhere().eq("c", 3).or().eq("d", 4));
このような書き方をしてw.getCriteria()で取得すると"(c = ?) or (d = ?))" という文字列が帰ってくると思います。
最後の")"は余計だと思います。テストコードを書いて実行しておりませんの勘違いの場合は申し訳ありません。
以上、よろしくお願いいたします。