jfluteです
志水さん、こんばんは
> と思ったのですが、SQL文のWhere文以下を
> パラメータとして実行できないのでしょうか?
できなくはないと思います。
埋め込み変数コメントで、そのままSQLに文字列を渡すことができます。
http://dbflute.seasar.org/ja/manual/function/ormapper/outsidesql/pmcomment.html#embeddedvariable
> sql2entity.batでちょっと意味のわからないエラーになってしまいました。
org.seasar.dbflute.exception.SQLFailureException: Look! Read the message below.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Failed to execute the SQL!
[SQL File]
..¥..¥Source¥SGMDB¥DBFlute¥ExBhv¥TMitsumoriHeadBhv_SelectMitsumoriData201.sql
[Executed SQL]
-- #SelectMitsumoriData201#
-- #df:x#
/*$pmb*/
[SQLState]
null
[ErrorCode]
0
[SQLException]
com.microsoft.sqlserver.jdbc.SQLServerException
ステートメントは ResultSet を返しませんでした。
* * * * * * * * * */
ResultSet というのは結果セット、つまり、select文の結果(レコードの集まり)のことで、
Javaではそのまま ResultSet というクラスで検索結果が戻ってきます。
(
ADO.NETだと、DataReaderがそれに相当します)
「ステートメントは ResultSet を返しませんでした。」
ということなので、そのselect文が結果セットを戻さないものだったということですね。
(0件と違って、SQLの結果が結果セットに形になってないということですね)
で、Executed SQLを見ると、select文になってないので上記のエラーになっています。
Sql2Entityで実行するSQLは、必ずselect文である必要があります。
-- #df:x# が効いていないかもですね。(DBFlute Engineが古くて)
これを宣言すると、Sql2Entityの実行対象から外れるはずですが。
一方で、where句だけ動的にしたいのであれば、
select句は普通に外だしSQLで書いてSql2EntityでEntity作る方が良いとは思います。
一方で一方で、「動的な条件でパターン数や条件数も多数あるので」がどのくらいか次第ですけど、
できる限り動的なSQL文字列を組み立てるというのはやらないほうが良いという感じはあります。
一応、お約束として。「DBFluteは動的なSQL文字列に積極的ではない」と。
> また、この過去ログの最後って以下のところで終わっているのですが
> 結局どうなったのかわかりますか?
> > Selectも含む(つまりEntityへのマッピングも含む)のであれば、
> > 外だしSQL(OutsideSql)の仕組みを利用した方が楽でしょう。
> 仮に、selectするカラムの個数が動的に変わる場合、
> Entityのマッピングって、どうなるんでしょう?
あれ、どこで見てます?自分のgmailで検索すると...その後の返事として:
マッピングは、とにかくSelect句のカラムと対応する
Entityのプロパティがあれば、そこに格納していく
というだけなので、実行するSQLに合わせてEntityを
設定すればOKです。
と返しています。