[Seasar-user:17955] S2Dao 1.0.50 で Date型を使用した検索の不具合
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2009年 7月 9日 (木) 11:14:09 JST
豊島(トヨシマ)です。
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 メーリングリストの案内