Я хотел бы использовать wait (int)
в качестве сигнатуры метода в свободном API (используется для http://www.jooq.org ) . Цель состоит в том, чтобы иметь возможность создавать запросы SQL, подобные этому примеру:
SELECT * FROM T_AUTHOR
WHERE ROWNUM <= 1
FOR UPDATE OF FIRST_NAME, LAST_NAME
WAIT 5
Полную спецификацию синтаксиса предложения FOR UPDATE
(по крайней мере для Oracle) можно увидеть здесь:
FOR UPDATE [ OF [ [ schema. ] { table | view } . ] column
[, [ [ schema. ] { table | view } . ] column]...]
[ { NOWAIT | WAIT integer | SKIP LOCKED } ]
http: // download. oracle.com/docs/cd/B28359_01/server.111/b28286/img_text/for_update_clause.htm
С jOOQ я действительно хочу оставаться ближе к синтаксису SQL. Поэтому я хотел бы иметь возможность смоделировать приведенное выше предложение SQL с помощью jOOQ fluent API следующим образом:
Result result = create.select()
.from(T_AUTHOR)
.limit(1)
.forUpdate()
.of(FIRST_NAME, LAST_NAME)
.wait(5) // Here's the issue
.fetch();
Метод fetch используется для визуализации базового объекта API как SQL и запуска оператора SQL для Oracle (или любого другого ) база данных. Вышеупомянутое можно юридически указать в интерфейсе:
/**
* A type that models a "step" in the creation of a query using the fluent API
*/
public interface SelectForUpdateWaitStep extends SelectFinalStep {
// [...]
/**
* Add a "FOR UPDATE .. WAIT n" clause to the query
*/
SelectFinalStep wait(int seconds);
// [...]
}
У меня есть некоторые сомнения по этому поводу, потому что существует риск столкновения с другим методом:
public class Object {
// [...]
public final native void wait(long timeout) throws InterruptedException;
// [...]
}
Благодаря перегрузке метода ( int
vs . длинные
аргументы), я действительно могу это сделать. Но я боюсь, что это может запутать моих пользователей и привести к ошибкам. Так что это было бы неправильно:
.forUpdate()
.of(FIRST_NAME, LAST_NAME)
.wait((long) 5) // This doesn't make sense
.fetch(); // This doesn't compile
Итак, мои вопросы:
Object.wait (long)
в целом? Я так не думаю, потому что он объявлен final
, но, может быть, кто-то знает трюк с компилятором или что-то еще? doWait (int)
или WAIT (int)
?