xaos 14.05.2011 03:56 h3r409b

Наткнулся в eclipselink jpa на странное поведение при выборке столбца типа boolean. Все значения false выбираются, а true — игнорируются. Полез разбираться и нашел волшебный класс ReportQuery, в котором значения из ResultSet перегоняются в коллекцию:

643 //If only the attribute is desired, then buildObject will only get the first attribute each time
644 for (int index = 0; index < size; index++) {
645 // GF_ISSUE_395
646 Object result = buildObject((AbstractRecord)rows.get(index), rows);
647 if (result != RESULT_IGNORED) {
648 containerPolicy.addInto(result, reportResults, this.session);
649 }
650 //end GF_ISSUE
651 }

GF_ISSUE_395 — http://java.net/jira/browse/GLASSFISH-39...
Насколько я понял, там решали проблему дублирования значений и добавили в buildObject возврат RESULT_IGNORED, если строка с таким ключом уже была добавлена в коллекцию.

Смотрим RESULT_IGNORED:

80 //GF_ISSUE_395
81 protected static final Boolean RESULT_IGNORED = Boolean.TRUE;
82 //end GF_ISSUE

Почему true? Наиболее правдоподобная причина в разработчике:
* Contributors:
* Oracle — initial API and implementation from Oracle TopLink
Ну а в оракле типа boolean нет — http://asktom.oracle.com/pls/asktom/f?p=...

TopLink JPA, очевидно, будет вести себя так же.

Do you really want to delete ?