Hi I'm having problem with Hibernate about date query. I try to query a record and then try to re-query with the criteria by using the data found previously. But there's no result returned. I think the year return is not match with the regional setting in my machine, coz I'm using Buddhist era (year 2005 = 2548 BE). The data type in the DB is stored as DATETIME.
Hibernate version: 2.1.7
Mapping documents:
Code:
<hibernate-mapping>
<class name="ebiz.sdc.fraud.model.FraudAttempt" table="EBMS_FRAUD_ATTEMPTS">
<composite-id>
<key-property name="action" column="action"
type="java.lang.String" length="30">
</key-property>
<key-property name="actionDate" column="action_date"
type="java.util.Date">
</key-property>
...
...
Code between sessionFactory.openSession() and session.close():Code:
FraudAttemptDao.java
public Collection findAllFraudAttempts() throws FindingException {
FraudAttempt fraudAttempt = new FraudAttempt();
return findFraudAttempts(fraudAttempt);
}
public Collection findFraudAttempts(FraudAttempt fraudAttempt) throws FindingException {
Collection result = null;
try {
Session s = new Configuration().configure().buildSessionFactory().openSession();
Criteria c = s.createCriteria(FraudAttempt.class);
if (fraudAttempt.getAction() != null && !"".equals(fraudAttempt.getAction())) {
c.add(Expression.like("action", fraudAttempt.getAction()));
}
if (fraudAttempt.getActionDate() != null) {
c.add(Expression.eq("actionDate", fraudAttempt.getActionDate()));
}
c.addOrder(Order.asc("actionDate"));
result = c.list();
s.close();
} catch (HibernateException e) {
throw new FindingException(e);
}
return result;
}
Code:
FraudAttemptTest.java
FraudAttemptDao dao = new FraudAttemptDao();
try {
Collection c1 = dao.findAllFraudAttempts(1, 3);
FraudAttempt f1 = null;
if (c1 != null && c1.size() > 0) {
f1 = (FraudAttempt)c1.iterator().next();
System.out.println("f1 : " + f1.getActionDate());
}
FraudAttempt ftemp = f1;
Collection c2 = dao.findFraudAttempts(ftemp, 1, 1);
FraudAttempt f2 = null;
if (c2 != null && c2.size() > 0) {
f2 = (FraudAttempt)c2.iterator().next();
System.out.println("f2 : " + f2.getActionDate());
}
if (f1 != null && f2 != null) {
assertEquals(f1.getMemo(), f2.getMemo());
}
Name and version of the database you are using: Oracle9i 9.0.2