[seasar-dotnet:339] [S2Dao] 複数テーブルとの1:Nマッピングエラーについて
his @ hamal.freemail.ne.jp
his @ hamal.freemail.ne.jp
2006年 9月 18日 (月) 02:02:33 JST
古賀です。
現在、S2Dao.NETでアプリケーション作成中なのですが、以下のエラーにはまってしまいました。
[テーブル]
TBL_A(PK:KEY1), TBL_B(PK:KEY1, KEYB), TBL_C(PK:KEY1, KEYC)
TBL_AとTBL_Bは1:N (リレーションキーはA:KEY1, KEY2、B:KEY1, KEYB)
TBL_AとTBL_Cは1:N (リレーションキーはA:KEY1, KEY3、B:KEY1, KEYC)
[エンティティ]
public class TBL_A
(TBL_Aのプロパティ)
Dim _tbl_b as TBL_B
Dim _tbl_c as TBL_C
<Relno(0), Relkeys("KEY1:KEY1,KEY2:KEYB")> _
Public Property TBLB() As TBL_B
(省略)
End Property
<Relno(1), Relkeys("KEY1:KEY1,KEY3:KEYC")> _
Public Property TBLC() As TBL_C
(省略)
End Property
end class
[処理]
S2Daoインターフェースで、SQL自動生成でGetAllTBL_Aで全件取得しようとたところ、以下の例外が発生しました。
InnerExceptionの情報は以下のとおりです。
[ESSR0071]SQLで例外が発生しました。理由はSeasar.Framework.Exceptions.SQLRuntimeException: [ESSR0071]SQLで例外が発生しました。理由はSystem.Data.OleDb.OleDbException: クエリ式 '' の 構文エラー : 演算子がありません。
場所 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
場所 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
場所 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
場所 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
場所 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
場所 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader()
場所 Seasar.Framework.Util.CommandUtil.ExecuteReader(IDataSource dataSource, IDbCommand cmd) ---> System.Data.OleDb.OleDbException: クエリ式 '' の 構文エラー : 演算子がありません。
場所 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
場所 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
場所 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
場所 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
場所 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
場所 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader()
場所 Seasar.Framework.Util.CommandUtil.ExecuteReader(IDataSource dataSource, IDbCommand cmd)
--- 内部例外スタック トレースの終わり ---
場所 Seasar.Framework.Util.CommandUtil.ExecuteReader(IDataSource dataSource, IDbCommand cmd)
場所 Seasar.Extension.ADO.Impl.BasicDataReaderFactory.CreateDataReader(IDataSource dataSource, IDbCommand cmd)
場所 Seasar.Extension.ADO.Impl.BasicSelectHandler.CreateDataReader(IDbCommand cmd)
場所 Seasar.Extension.ADO.Impl.BasicSelectHandler.Execute(IDbCommand cmd)
場所 Seasar.Extension.ADO.Impl.BasicSelectHandler.Execute(IDbConnection connection, Object[] args, Type[] argTypes, String[] argNames)
場所 Seasar.Extension.ADO.Impl.BasicSelectHandler.Execute(Object[] args, Type[] argTypes, String[] argNames)
例外情報の中に
TargetInvocationException.Data.Itemに「インデックス付きのプロパティを評価するためには、プロパティが限定されていて、ユーザーにより引数が明示的に指定されていなければなりません。」
と出ているのが気になりますが...
ちなみに、TBL_Bのみマッピングした場合はうまく取得できました。
また、TBL_Cのみマッピングした場合(RelNoは0に変更)もうまく取得できました。
複数テーブルのマッピングの対応で何か洩れているのでしょうか?
===
古賀久司 (Hisashi KOGA)
e-mail : his @ hamal.freemail.ne.jp
seasar-dotnet メーリングリストの案内