[Seasar-user:17956] Re: S2Dao 1.0.50 で Date型を使用した検索の不具合

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2009年 7月 9日 (木) 12:27:46 JST


豊島(トヨシマ)です。

中途半端な自己解決の報告です。
検索は出来る様に成りました。
>	cal.set(Calendar.YEAR, 1977);
>	cal.set(Calendar.MONTH, Calendar.OCTOBER);
>	cal.set(Calendar.DAY_OF_MONTH, 14);
 ここを cal.set(1977, Calendar.OCTOBER, 14, 0, 0, 0); に変更したら上手
く取得できました。
 どこかで時分秒?を見ているのでしょうか?分かりませんが・・・とりあえず
取得は出来る様に成りました。
 ちなみに cal.set(1977, Calendar.OCTOBER, 14); でやると失敗します。

>豊島(トヨシマ)です。
>
>S2Dao 1.0.50 を使っていて困ったことに成っております。
>
>次の再現手順で行うと4の「※失敗」のところで必ず失敗してしまいます。
>実行しているSQL文を手動で実行するとレコードは返ってきているようです。
>SQLのDate型を検索条件にすると取得に失敗しているようです。
>何が原因でしょうか?
>
>【再現手順】
>
>1.MySQLでテーブルを作成。
>CREATE TABLE IF NOT EXISTS `Birthday` (
>  `id` int(11) NOT NULL auto_increment,
>  `name` varchar(255) NOT NULL,
>  `birthday` date NOT NULL,
>  PRIMARY KEY  (`id`)
>) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
>INSERT INTO `Birthday` (`id`, `name`, `birthday`) VALUES (1, '名前', '1977-10
>-14');
>
>2.Daoクラスを作成
>
>import java.util.Date;
>import org.seasar.dao.annotation.tiger.Arguments;
>import org.seasar.dao.annotation.tiger.Query;
>import org.seasar.dao.annotation.tiger.S2Dao;
>
>@S2Dao(bean = Birthday.class)
>public interface BirthdayDao {
>	@Arguments( { "date" })
>	@Query("birthday = /*date*/")
>	public Birthday getBirthdayByDate(Date date);
>
>	@Arguments( { "id" })
>	@Query("id = /*id*/")
>	public Birthday getBirthdayById(Integer id);
>}
>
>3.Entityを作成
>
>import java.util.Date;
>import org.seasar.dao.annotation.tiger.Bean;
>@Bean
>public class Birthday {
>	private Integer id;
>	private String name;
>	private Date birthday;
>	(getter setter省略)
>}
>
>4.Testを実行
>public void testGetBirthdayByDate() {
>	Calendar cal = Calendar.getInstance();
>	cal.set(Calendar.YEAR, 1977);
>	cal.set(Calendar.MONTH, Calendar.OCTOBER);
>	cal.set(Calendar.DAY_OF_MONTH, 14);
>	Date day = cal.getTime();
>	Birthday birthday;
>
>	birthday = birthdayDao.getBirthdayById(1);
>	assertNotNull(birthday); // 成功
>	cal.setTime(birthday.getBirthday());
>	assertEquals(1977, cal.get(Calendar.YEAR)); // 成功
>	assertEquals(Calendar.OCTOBER, cal.get(Calendar.MONTH)); // 成功
>	assertEquals(14, cal.get(Calendar.DAY_OF_MONTH)); // 成功
>
>	birthday = birthdayDao.getBirthdayByDate(day);
>	assertNotNull(birthday); // ※失敗
>	cal.setTime(birthday.getBirthday());
>	assertEquals(1977, cal.get(Calendar.YEAR));
>	assertEquals(Calendar.OCTOBER, cal.get(Calendar.MONTH));
>	assertEquals(14, cal.get(Calendar.DAY_OF_MONTH));
>}
>
>※テスト実行のSQLログ
>SELECT Birthday.birthday, Birthday.id, Birthday.name FROM Birthday WHERE id = 
>1
>SELECT Birthday.birthday, Birthday.id, Birthday.name FROM Birthday WHERE 
>birthday = '1977-10-14'
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user



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