[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 メーリングリストの案内