[seasar-dotnet:403] 複数のテーブルを結合したsqlのファイルでのデータ取得について
Mai Kawasaki
kawasaki @ snapshot.co.jp
2006年 11月 29日 (水) 16:58:43 JST
はじめまして、maiと申します。
現在、複数のテーブルを結合したsqlのファイルとビューのような仮想的なbeanを作成し、
自由にマッピングさせるという方法でデータを取得するプログラムを作成しています。
現在の環境は以下の通りです。
VB2005、S2Container.NET 1.2.5、S2Dao.NET 1.0.0
プログラムの内容は、以下のような感じです。
---ICustomerDao.vb---------
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Seasar.Dao.Attrs
<Bean(GetType(CustomerBean))> _
Public Interface ICustomerDao
Function GetList() As IList
End Interface
--------------------------
---ICustomerDao_GetList.sql---
SELECT c.customer_id, c.customer_name, c.user_id, u.user_name
FROM customer_master c, user_master u
WHERE c.user_id = u.user_id
-----------------------------
---CustomerBean.vb----------
Public Class CustomerBean
Private _customerId As Integer = 0
Private _customerName As String = ""
Private _userId As Integer = 1
Private _userName As String = ""
Public Property CustomerId() As Integer
---省略---
End Property
Public Property CustomerName() As String
---省略---
End Property
Public Property UserId() As Integer
---省略---
End Property
Public Property UserName() As String
---省略---
End Property
End Class
------------------------------
現在の環境では、GetList()を呼び出すとCustomerBeanのリストが正しく取得できるのですが、
先日リリースされました、S2Container.NET 1.2.6、S2Dao.NET 1.0.1
にバージョンを変更すると、IndexOutOfRangeExeptionがキャッチされるようになりました。
ログは以下の通りです。
---ログ-------------------------------
DEBUG Seasar.Framework.Util.DataSourceUtil
- 論理的なコネクションを取得しました
DEBUG Seasar.Framework.Util.ConnectionUtil
- 論理的なコネクションを閉じました
WARN Seasar.Dao.Impl.BeanMetaDataImpl
- テーブル(CustomerBean)が見つかりません
DEBUG Seasar.Extension.ADO.Impl.BasicSelectHandler
- SELECT c.customer_id, c.customer_name, c.user_id, u.user_name
FROM customer_master c, user_master u
WHERE c.user_id = u.user_id
DEBUG Seasar.Framework.Util.DataSourceUtil
- 論理的なコネクションを取得しました
DEBUG Seasar.Framework.Util.ConnectionUtil
- 論理的なコネクションを閉じました
ERROR Customer
- 場所 System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String
fieldName)
場所 System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
場所 System.Data.SqlClient.SqlDataReader.get_Item(String name)
場所 Seasar.Extension.ADO.Types.BaseValueType.GetValue(IDataReader
reader, String columnName)
場所
Seasar.Dao.Impl.AbstractBeanMetaDataDataReaderHandler.CreateRow(IDataReader
reader, IColumnMetaData[] columns)
場所 Seasar.Dao.Impl.BeanListMetaDataDataReaderHandler.Handle(IDataReader
dataReader, IList list)
場所 Seasar.Dao.Impl.BeanListMetaDataDataReaderHandler.Handle(IDataReader
dataReader)
場所 Seasar.Extension.ADO.Impl.BasicSelectHandler.Execute(IDbCommand cmd)
場所 Seasar.Extension.ADO.Impl.BasicSelectHandler.Execute(IDbConnection
connection, Object[] args, Type[] argTypes)
場所 Seasar.Extension.ADO.Impl.BasicSelectHandler.Execute(Object[] args,
Type[] argTypes)
場所 Seasar.Dao.Impl.SelectDynamicCommand.Execute(Object[] args)
場所 Seasar.Dao.Interceptors.S2DaoInterceptor.Invoke(IMethodInvocation
invocation)
場所 Seasar.Framework.Aop.Proxy.AopProxy.Invoke(IMessage msg)
場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&
msgData, Int32 type)
場所 ICustomerDao.GetList()
------------------------------------
どうすれば解決できるのかアドバイス頂けませんでしょうか。
長くなってしまい大変申し訳ございませんが、よろしくお願い致します。
-----
mai
kawasaki @ snapshot.co.jp
seasar-dotnet メーリングリストの案内