S2JDBCに対する微妙な要望
書いてる本人が微妙(=あるに越したことはないけど、なくても70%くらいの人は困らないかも)だなぁと思っているので書くのもどうかと思うのだけれど、もしかしたら他にも同じことを考えている人がいるかもしれないので一応。
SimpleWhereだけパッケージが違うのがうざったい
import org.seasar.extension.jdbc.*;
とインポートすると、SimpleWhereだけが使えないのでうざったい。S2JDBC使う場合はほぼ必須だということを考えると、あえてパッケージを分離する必要もないんじゃないかなぁ(〜Whereクラスが今後大量発生するならともかく)。
@Columnで計算式を扱えるようにしてほしい
個人的には結構重要なのだけど、世間的にはそうでもないのかな?(計算などはJava側でやるという方針なのかも)。JPA的にもNGかもしれないので、どうかというのもわからんでもないけど。
例えばこんな感じ(実際にやってみたら「T1_.(dayCount * dayRate)」となり失敗する)。
public Attendance { public Integer dayCount; public BigDecimal dayRate; @Column(name="(dayCount * dayRate)") public BigDecimal salery; }
大量データを扱えるよう、1件ずつデータを処理する機構がほしい
大量データを検索して処理したい時に、List
// org.seasar.extension.jdbc.SelectにgetResultHandler()を実装 ResultHandler<Employee> handler = jdbcManager.from(Employee.class).getResultHandler(); try { for (Employee emp : handler) { // handle emp } } finally { handler.close(); }
木構造のデータを簡単に構成できるようにしてほしい
例えばこんなテーブル(部署マスタ)があったとする。
ID | 上位ID | 名前 |
---|---|---|
1 | null | 本社 |
2 | 1 | 支社A |
3 | 1 | 支社B |
4 | 3 | 支社A 1課 |
5 | 3 | 支社B 2課 |
このとき、おそらくEntityクラスは次のようになる。
public class Department { @Id public Integer id; public Integer parentDepartmentId; public String name; @ManyToOne public Department parantDepartment; @OneToMany public List<Department> childDepartmentList; }
本当にほしいのはこの部署のツリー構造なのだが、S2JDBCのJOINを使うと、JOINした回数分の階層しか取得できない。しかし、データ的には1回SELECT文を発行するだけで取ってこれる(同じテーブルなので)。
だから、例えばgetTreeResult()みたいなメソッドを呼ぶと、fromで指定したEntityの自己結合を自動的に解決して、親子を関連付けてほしい。
List<Department> departments = jdbcManager .from(Department.class) .getTreeResult(); int size = departments.size() // == 1 List<Department> children = departments.get(0).childDepartmentList; // 支社Aと支社Bのリストを取得
#もしかして、S2Dxo使えばできる?