[Seasar-user:19556] 【S2Dao】SELECT結果がEntityに入らないケースがある

Hidemasa Aoki [E-MAIL ADDRESS DELETED]
2010年 3月 26日 (金) 14:29:17 JST


いつもお世話になっております。ITプランナーズの青木です。

S2Daoで不可解な動作をして困っているので助けてください。

メールで説明するのは難しいですが、がんばって書いてみます。

問題を簡潔に述べると、SELECTでは正しく取得できているのに、EntityのhomeKaddr1
などに値がセットされない、ということです。
しかも、CardEntryDaoでは問題ないのに、CardEntryPreprintDaoでは現象が発生しま
す。
いったい何が違うのか、さっぱりわかりません。
SELECTの結果とEntityのプロパティのマッピングに、何か注意すべき点があるので
しょうか?
(たとえば、項目名に_1などがあると、気分次第で正しく動かないこともある、と
か。)

以下に詳細を記します。

――――――――――――――――――――――――――
CardEntryPreprintDao
に
	public CardEntry[] selectPreprintTarget();
というメソッドを用意しています。
――――――――――――――――――――――――――
SQLファイルCardEntryPreprintDao_selectPreprintTarget.sqlは、

select
	CE.*
from
	CARD_ENTRY CE
	left outer join CARD_ENTRY_PREPRINT CEP on CE.RECORD_ID =
CEP.RECORD_ID
 where
         CE.INPUT_CNT = '1'
         and CEP.PREPRINT_STATUS = '20'
         and CEP.PREPRINT_FILE_CREATE_FLG is null

としています。
――――――――――――――――――――――――――
CARD_ENTRYテーブルには、

HOME_POSTAL_CODE
HOME_KADDR_1
HOME_KADDR_2
HOME_KADDR_3
HOME_JADDR_1
HOME_JADDR_2
HOME_JADDR_3

という項目があります。

――――――――――――――――――――――――――
CardEntryには、

	private String homePostalCode;

	private String homeKaddr1;

	private String homeKaddr2;

	private String homeKaddr3;

	private String homeJaddr1;

	private String homeJaddr2;

	private String homeJaddr3;

というプロパティ(getter, setterももちろんあります。)を用意しています。

――――――――――――――――――――――――――

上記のようにしているのに、

	private String homeKaddr1;

	private String homeKaddr2;

	private String homeKaddr3;

	private String homeJaddr1;

	private String homeJaddr2;

	private String homeJaddr3;

に値が入ってこないでnullになってしまうのです。もちろん、SQLを実行してSELECT
文では値が正しく取得できていることは確認しています。
また、

	private String homePostalCode;

には値が入ります。※これが不思議!

――――――――――――――――――――――――――

そして、もうひとつDaoがあって、
CardEntryDao

	@Arguments( { "argInputStartDateFrom", "argInputStartDateTo",
"argStatus",
			"argOutputTagDateFrom", "argOutputTagDateTo",
"argInputOperatorId" })
	public CardEntryListDto[]
findByInputStartDateAndStatusAndOutputTagDateAndInputOperatorIdPagerConditio
n(
			java.util.Date argInputStartDateFrom,
			java.util.Date argInputStartDateTo, String
argStatus,
			java.util.Date argOutputTagDateFrom,
			java.util.Date argOutputTagDateTo, String
argInputOperatorId,
			CardEntryPagerCondition dto);

というメソッドがあります。

結果の型のCardEntryListDtoは、extends CardEntryです。

――――――――――――――――――――――――――

CardEntryDao_findByInputStartDateAndStatusAndOutputTagDateAndInputOperatorId
PagerCondition.sql
は、

select
	CE.*
	,MGE.ITEM_VALUE as STATUS_NAME
from
	CARD_ENTRY CE
	inner join MST_GENERAL_ENTRY MGE on CE.STATUS = MGE.ITEM_CD and MGE.
CATEGORY_CD = '0030'
/*BEGIN*/
 where
       /*IF argInputStartDateFrom != null*/
         INPUT_START_DATE >= /*argInputStartDateFrom*/'1900/1/1'
       /*END*/
       /*IF argInputStartDateTo != null*/
         and INPUT_START_DATE <= /*argInputStartDateTo*/'1900/1/1'
       /*END*/
       /*IF argStatus != null*/
         and STATUS = /*argStatus*/' '
       /*END*/
       /*IF argOutputTagDateFrom != null*/
         and OUTPUT_TAG_DATE >= /*argOutputTagDateFrom*/'1900/1/1'
       /*END*/
       /*IF argOutputTagDateTo != null*/
         and OUTPUT_TAG_DATE <= /*argOutputTagDateTo*/'1900/1/1'
       /*END*/
       /*IF argInputOperatorId != null*/
         and INPUT_OPERATOR_ID = /*argInputOperatorId*/' '
       /*END*/
/*END*/
 ORDER BY RECORD_ID,INPUT_CNT

です。

――――――――――――――――――――――――――

現在は暫定対応(確実に動くDaoのほうで再取得)して逃げているので問題ないので
すが、やはりあるべき姿で実装したいです。




Seasar-user メーリングリストの案内