S2JDBC
iterateで取得するときの続き。寝かせてみました。id:higayasuoさんから BasicSelectHandlerと自前のResultSetHandlerの組み合わせ。 といただきましたが、Commons.DBUtilsとほとんど同じ機能なのでS2JDBCの外だしSQLが使えません。外だしSQLでビルドアップ…
Javaで大量のデータをListなんかで取得しちゃうと件数分のオブジェクトを作成してしまうので困るんですが、J2JDBCだと1件毎に取得できるのでJVMに負担をかけずに処理できます。カラム名の取得を行いたい場合、BeanMapを使ってカラム名を動的に取得できるんで…
TxAttributeCustomizerを設定した場合、例外はずべてコミット処理されるみたいです。 j2ee.requiredTx等のコンポーネントを使って設定した場合はコミットする・しないを明示的に設定できたけど、どうもTxAttributeCustomizerにはaddCommitRule()やaddRollbac…
SAStrutsはバリデーションのメソッドをActionに書くん様になっているんだけど、actionCustomizerでTxAttributeCustomizerを設定するとバリデーションのメソッドにまでTxAttributeが当たってるみたい。 ログに出てる。 @Executeがあるメッソッドだけでいいん…
SQLファイルは、クラスパス上にあるならどこにおいてもかまいませんが、 ルートパッケージ.sql.テーブル名 のパッケージに対応したディレクトリ配下に置くことを推奨します。 例えば、 employee テーブルに関するSQLファイルは、 examples/sql/employee ディ…
ActionとServiceの責務の続き。SAStrutsのサンプル(employee)を書くときに、最初は、ActionとServiceは分けていたんです。で、どうだったかって言うと、ActionはS2BeanUtilsを呼び出すコードだけがあり、Serviceには、S2JDBCを呼び出すコードだけしかない。 …
AbstractAutoBatchUpdate#executeInternal()のなかで実行結果の件数を元にvalidateRows()で更新件数が0の時は楽観的排他ロックのエラーとしてるんだけど、OracleのjdbcではどうもexecuteBatchの戻り値としてSUCCESS_NO_INFO(-2)が返ってきてて、件数が正しく…
SAStruts+S2JDBCを使った開発では ServiceはEnthity単位に ロジックはActionに記述する ユースケース内のコードシェアは抽象クラスで 広範囲のコードシェアはLogicなりユーティリティなクラスで という感じみたいですが、ちょっと悩みどころが。よく1つのテ…
S2JDBCで発行されるSQLを取得できるようなことをどこかでみた覚えがあるので、思い出して探す。 結果は後ほど。 2008/07/23 09:48 追記 みっけ。 SqlLogRegistry registry = SqlLogRegistryLocator.getInstance(); SqlLog sqlLog = registry.getLast(); S2JD…
S2JDBCでAutoSelectかSimpleWhereを使ってWhere句を設定するんだけど演算の順位付け(?)を設定する方法が判らない。例えば複合キー(id1、id2)で特定のキー(id1=1、id2=1)以外の全てを取得したい場合 (例が悪いけど・・・) SimpleWhere w1 = new SimpleWhe…
S2JDBCのupdateは更新対象のレコードがない場合、SOptimisticLockExceptionが返ってきます。 これでもいいんでしょうが、できれば「対象がありません。」みたいな感じがうれしいので、updateの前に更新対象のEntityが存在するかしないか調べたいとお思います…
Seasar2.4.26からServiceのひな形となるS2AbstractServiceが用意されている。アプリケーションはS2AbstractServiceのサブクラスを作って各やりたいことを追加して利用するようになってるんだけど、Serviceを実装してS2TestCaseで動かしてみると、S2AbstractS…
Hibernateは複合キーを使う場合何かと面倒だったので複合キーにはすごい抵抗が合ったんだけど、S2JDBCの複合キーはすっごい簡単。Entityを以下の様すると、 @Entity public class Hoge { @Id public Integer id1; @Id public Integer id2; @Id public Intege…
S2JDBCのTutorialでDepartmentのエンティティにOneToManyでEmployeeのエンティティが指定されています。 @Entity public class Department { ... @OneToMany(mappedBy = "department") public List employeeList; } というEntityに対して List results = jdb…
S2JDBCのselectBySqlを使ってCSVファイルの出力なんかを大量に作るんだけど、件数の上限がわかんないのでResultSetHandlerを独自に実装したいんだけど、ググっても2004年頃の話しか出てこない。 わざわざResultSetHandlerを独自に実装するのはSQL文の項目名…
Mapインターフェースなんだけど、実装はHashMap。なのでSQLで記述したカラム順序とBeanMapから取得できる項目の順序は一致しない。大概は問題では無いんだけど、ダウンロードデータをめんどくさいからそのまま出力したい場合、カラム順とCSVの並びを一致させ…
S2JDBCの関連はHibernateとかと違って、対象のキーもエンティティに指定する必要があります。 その辺りの話はここから。OneToOneやManyToOneの場合、先に関連付けする方を登録しないと、関連付けされる方に設定する識別子が判らない気がするんだけど、どうな…