Nazunaは、transAttributeの設定に応じて、自動でトランザクション制御を行ってくれます
設定可能な値は以下のとおりです。
| 値 | 説明 |
|---|---|
| Supports | Nazunaはなにもしません。(デフォルト) |
| Required | トランザクションが開始されていなければ、 Nazunaがトランザクションを開始します。 既にトランザクションが開始されていれば、 そのトランザクションを引き継ぎます。 |
| RequiresNew | 常に新しいトランザクションを開始させます。 既存のトランザクションが開始されているなら、 既存のトランザクションを中断し、 自分自身のトランザクションの終了後、 中断したトランザクションを復帰させます。 |
| Mandatory | トランザクションが既に開始されてなければエラーにします。 |
別のSeasarで動いているNazunaを呼び出すこともできます。
SeasarContext ctx = SeasarContext.getInstance(リモートSeasarのコンテキスト名);
NazunaServiceMBean nazuna = (NazunaServiceMBean) ctx.lookup("mbean/nazuna");
nazuna.execute(...);
nazuna.executeRulet(...);
nazuna.executeQuery(...);
nazuna.executeUpdate(...);
Nazuna.executeQuery()した結果(List)を、特定の条件で絞り込見たい場合、
org.seasar.nazuna.FilterDescクラスを使います。
例えば、departmentNoが20である従業員のデータを絞り込みたいときには次のようにします。
Listの要素は、itemという名前で参照します。
List result = Nazuna.executeQuery(...);
FilterDesc filterDesc = new FilterDesc("item.departmentNo = 20");
List filteredResult = filterDesc.filter(result);
条件にはパラメータも使えます。
List result = Nazuna.executeQuery(...);
FilterDesc filterDesc = new FilterDesc("item.departmentNo = deptno");
Map parameters = new HashMap();
parameters.put("deptno", new Integer(20));
List filteredResult = filterDesc.filter(result, parameters);
FilterDesc.filterFirst()を使うと、条件に一致した最初の要素を取得できます。
List result = Nazuna.executeQuery(...);
FilterDesc filterDesc = new FilterDesc("item.employeeNo = 7788");
Employee emp = (Employee) filterDesc.filterFirst(result);
Nazuna.executeQuery()した結果(List)を、ソートしたい場合、
org.seasar.nazuna.SortDescクラスを使います。
例えば、departmentNoで降順、employeeNameで昇順にソートする場合、次のようにします。
SQLのOrdery By句と同じです
List result = Nazuna.executeQuery(...);
SortDesc sortDesc = new SortDesc("departmentNo desc, employeeName");
List sortedResult = sortDesc.sort(result);
Nazuna.executeQuery()した結果(List)を、グルーピングしたい場合、
org.seasar.nazuna.GroupDescクラスを使います。
例えば、departmentNo単位で、salaryの合計を求める場合、次のようにします。
SQLでGroup Byするときの選択リスト(SELECT句とFROM句の間)と同じです
List result = Nazuna.executeQuery(...);
GroupDesc groupDesc = new GroupDesc("departmentNo, SUM(salary) as totalSalary");
List groupedResult = groupDesc.group(result);
for (int i = 0; i < groupedResult.size(); i++) {
EMap item = (EMap) groupedResult.get(i);
System.out.println(item.get("departmentNo"));
System.out.println(item.get("totalSalary"));
}
グルーピングした結果のリストの各要素は、org.seasar.util.EMapオブジェクトになります。