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