Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version:
2.1.8
Mapping documents:
<property
name="servername"
type="dars.apis.common.dao.hibernate.type.OracleCHAR"
column="servername"
length="10"
>
<meta attribute="property-type">java.lang.String</meta>
</property>
Code between sessionFactory.openSession() and session.close():
Full stack trace of any exception that occurs:
Name and version of the database you are using:
Oracle 9i
The generated SQL (show_sql=true):
Debug level Hibernate log excerpt:
for case 1 where it is supposed to be mapped
25 Aug 2005 13:50:35 : [DEBUG] net.sf.hibernate.SQL - select jobqueueli0_.instidq as instidq, jobqueueli0_.instid as instid, jobqueueli0_.instcd as instcd, jobqueueli0_.jobid as jobid, jobqueueli0_.userid as userid, jobqueueli0_.status as status, jobqueueli0_.priority as priority, jobqueueli0_.startdate as startdate, jobqueueli0_.starttime as starttime, jobqueueli0_.external_eval as externa10_, jobqueueli0_.read_sysin as read_sysin, jobqueueli0_.servername as servername, jobqueueli0_.last_mod_user as last_mo13_, jobqueueli0_.last_mod_date as last_mo14_ from job_queue_list jobqueueli0_ where (jobqueueli0_.status=? )and(jobqueueli0_.servername=? )and((jobqueueli0_.startdate<=? )or(jobqueueli0_.startdate is null ))and((jobqueueli0_.starttime<=? )or(jobqueueli0_.starttime is null )) order by jobqueueli0_.priority , jobqueueli0_.jobid
25 Aug 2005 13:50:35 : [DEBUG] net.sf.hibernate.impl.BatcherImpl - preparing statement
25 Aug 2005 13:50:35 : [DEBUG] net.sf.hibernate.type.StringType - binding '2005/02/11' to parameter: 3
25 Aug 2005 13:50:35 : [DEBUG] net.sf.hibernate.type.StringType - binding 'dars1' to parameter: 2
25 Aug 2005 13:50:35 : [DEBUG] net.sf.hibernate.type.StringType - binding '14:28' to parameter: 4
25 Aug 2005 13:50:35 : [DEBUG] net.sf.hibernate.type.StringType - binding 'D' to parameter: 1
25 Aug 2005 13:50:35 : [DEBUG] net.sf.hibernate.loader.Loader - processing result set
25 Aug 2005 13:50:35 : [DEBUG] net.sf.hibernate.loader.Loader - done processing result set (0 rows)
--------------------------------------------------------
for case 2 where I have 'dars1' hardcoded into the hql statement
25 Aug 2005 13:37:34 : [DEBUG] net.sf.hibernate.SQL - select jobqueueli0_.instidq as instidq, jobqueueli0_.instid as instid, jobqueueli0_.instcd as instcd, jobqueueli0_.jobid as jobid, jobqueueli0_.userid as userid, jobqueueli0_.status as status, jobqueueli0_.priority as priority, jobqueueli0_.startdate as startdate, jobqueueli0_.starttime as starttime, jobqueueli0_.external_eval as externa10_, jobqueueli0_.read_sysin as read_sysin, jobqueueli0_.servername as servername, jobqueueli0_.last_mod_user as last_mo13_, jobqueueli0_.last_mod_date as last_mo14_ from job_queue_list jobqueueli0_ where (jobqueueli0_.status=? )and(jobqueueli0_.servername='dars1' )and((jobqueueli0_.startdate<=? )or(jobqueueli0_.startdate is null ))and((jobqueueli0_.starttime<=? )or(jobqueueli0_.starttime is null )) order by jobqueueli0_.priority , jobqueueli0_.jobid
25 Aug 2005 13:37:34 : [DEBUG] net.sf.hibernate.impl.BatcherImpl - preparing statement
25 Aug 2005 13:37:34 : [DEBUG] net.sf.hibernate.type.StringType - binding '2005/02/11' to parameter: 2
25 Aug 2005 13:37:34 : [DEBUG] net.sf.hibernate.type.StringType - binding '14:28' to parameter: 3
25 Aug 2005 13:37:34 : [DEBUG] net.sf.hibernate.type.StringType - binding 'D' to parameter: 1
25 Aug 2005 13:37:34 : [DEBUG] net.sf.hibernate.loader.Loader - processing result set
--------------------------------------------------------------
The following code does not return values when it should
Code:
"from JobQueueList jql where jql.status=:status and jql.servername=:servername "
+ " and (jql.startdate <=:startdate or jql.startdate is null) "
+ " and (jql.starttime <=:starttime or jql.starttime is null) "
+ " order by jql.priority, jql.comp_id.jobid",
jobQueueList);
The problem is isolated to servername. In my test, I have
Code:
setServername("dars1");
However, if I make the test line
Code:
setServerName("dars1 ")
it does work.
The following code also returns values
Code:
"from JobQueueList jql where jql.status=:status and jql.servername='dars1' "
+ " and (jql.startdate <=:startdate or jql.startdate is null) "
+ " and (jql.starttime <=:starttime or jql.starttime is null) "
+ " order by jql.priority, jql.comp_id.jobid",
jobQueueList);
as you can see, I've hardcoded the value into the statement.
servername is defined as type CHAR(10). I cannot change it to varchar, nvarchar, varchar2 or whatever, it is a legacy database.
I've tried implementing this UserDefinedType at the bottom of this
http://www.hibernate.org/90.html web page, but it appears that nullSafeGet and nullSafeSet do not get used on mapping parameters that are after the
where clause.
Please help, I've spent days trying to figure this out.
chris