-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Identical queries resulting in different results
PostPosted: Thu Apr 22, 2004 8:14 am 
Newbie

Joined: Tue Apr 06, 2004 8:44 am
Posts: 9
I have one large table "transaction" and it is mapped to a BaseTransaction object. This base object has numerous subclasses that are mapped to the same transaction table. For some reason, query 1 (see running code section) below works (returns results) and query 2 does not (returns empty List). According to the log, the queries that Hibernate is running *both* produce records. I am including the mapping below as well. I would think that it has to do with the mapping but they look identical to me. There is no exception thrown...just different results. At the bottom, I am also posting the generated SQL from Hibernate. Both of these produce resulting records. One thing that I notice is that the "working" sql also contains the sql for the joining mapped classes where the "non-working" code does not. However, I don't think that I am controlling that. Any suggestions would be most appreciated.

Travis



Running code:
<pre>
String sql = null;
switch (flag) {
case 1: //results in records returned
sql = "from com.novainfo.emt.domain.VisaTransaction as tran " +
"where tran.typeCode.description = 'Visa Outgoing' " +
"and tran.status.description = 'New'";
break;
case 2: //returns empty result list
sql = "from com.novainfo.emt.domain.JcbTransaction as tran " +
"where tran.typeCode.description = 'Jcb Funded Outgoing' " +
"and tran.status.description = 'New'";
break;
default:
}
Database db = null;
try {
Class[] classes =
new Class[] {BaseTransaction.class,
MerchantNumberType.class,
TransactionType.class,
TranCode.class,
TransactionStatus.class};
db = DbFactory.getInstance().getDatabase(classes);
db.open();
java.util.List results = db.query(sql);
System.err.println(results);
} catch(Exception e) {
e.printStackTrace();
} finally {
if (db != null) {
try {
db.close();
} catch(Exception e) {}
}
}
</pre>


hbm.xml:
<pre>
<hibernate-mapping>
<class name="com.novainfo.emt.domain.BaseTransaction" table="transaction" discriminator-value="B">
<id name="id" type="long" unsaved-value="0" column="tran_id">
<generator class="sequence">
<param name="sequence">emt_id_sequence</param>
</generator>
</id>
<discriminator column="card_type" type="character"/>
<property name="merchName">
<column name="merch_name" sql-type="string" not-null="false"/>
</property>
<property name="merchNum">
<column name="merch_num" sql-type="string" not-null="false"/>
</property>
<property name="refNum">
<column name="ref_num" sql-type="string" not-null="false"/>
</property>
<property name="tranAmt">
<column name="tran_amt" sql-type="double" not-null="false"/>
</property>
<property name="reportDate">
<column name="report_date" sql-type="date" not-null="false"/>
</property>
<property name="cardHolderNum">
<column name="card_holder_num" sql-type="string" not-null="false"/>
</property>
<many-to-one name="merchNumType"
class="com.novainfo.emt.domain.MerchantNumberType"
column="merch_num_type_id"
cascade="none"/>
<many-to-one name="typeCode"
class="com.novainfo.emt.domain.TransactionType"
column="type_code_id"
cascade="none"/>
<many-to-one name="tranCode"
class="com.novainfo.emt.domain.TranCode"
column="tran_code_id"
cascade="none"/>
<many-to-one name="status"
class="com.novainfo.emt.domain.TransactionStatus"
column="tran_status_id"
cascade="none"/>
<subclass name="com.novainfo.emt.domain.VisaTransaction" discriminator-value="V">
<property name="clientGrp">
<column name="client_group" sql-type="string" not-null="false"/>
</property>
<property name="source">
<column name="source" sql-type="string" not-null="false"/>
</property>
<property name="paperItem">
<column name="paper_item_flag" sql-type="boolean" not-null="false"/>
</property>
<property name="reReject">
<column name="rereject_flag" sql-type="boolean" not-null="false"/>
</property>
<property name="rejectCode">
<column name="reject_code" sql-type="string" not-null="false"/>
</property>
<property name="acceptorId">
<column name="acceptor_id" sql-type="string" not-null="false"/>
</property>
<property name="represent">
<column name="represent_flag" sql-type="boolean" not-null="false"/>
</property>
</subclass>
<subclass name="com.novainfo.emt.domain.JcbTransaction" discriminator-value="J">
<property name="jcbMerchNum">
<column name="assn_merch_num" sql-type="string" not-null="false"/>
</property>
<property name="tranDate">
<column name="tran_date" sql-type="date" not-null="false"/>
</property>
<property name="funded">
<column name="funded_flag" sql-type="boolean" not-null="false"/>
</property>
<property name="interchanged">
<column name="interchanged_flag" sql-type="boolean" not-null="false"/>
</property>
<property name="reason">
<column name="reason" sql-type="string" not-null="false"/>
</property>
</subclass>
</class>
</hibernate-mapping>
</pre>


Generated SQL:
<pre>
--Working SQL for VisaTransaction:
select visatransa0_.tran_id as tran_id,
visatransa0_.client_group as client_13_,
visatransa0_.source as source,
visatransa0_.paper_item_flag as paper_i15_,
visatransa0_.rereject_flag as rerejec16_,
visatransa0_.reject_code as reject_17_,
visatransa0_.acceptor_id as accepto18_,
visatransa0_.represent_flag as represe19_,
visatransa0_.merch_name as merch_name,
visatransa0_.merch_num as merch_num,
visatransa0_.ref_num as ref_num,
visatransa0_.tran_amt as tran_amt,
visatransa0_.report_date as report_d7_,
visatransa0_.card_holder_num as card_hol8_,
visatransa0_.merch_num_type_id as merch_nu9_,
visatransa0_.type_code_id as type_co10_,
visatransa0_.tran_code_id as tran_co11_,
visatransa0_.tran_status_id as tran_st12_
from transaction visatransa0_,
transaction_type transactio1_,
transaction_status transactio2_
where visatransa0_.card_type='V'
and ((transactio1_.description='Visa Outgoing' and visatransa0_.type_code_id=transactio1_.transaction_type_id)
and(transactio2_.description='New' and visatransa0_.tran_status_id=transactio2_.tran_status_id))


select merchantnu0_.merchant_number_type_id as merchant1_0_,
merchantnu0_.description as descript2_0_
from merchant_number_type merchantnu0_
where merchantnu0_.merchant_number_type_id=?

select transactio0_.transaction_type_id as transact1_0_,
transactio0_.description as descript2_0_
from transaction_type transactio0_
where transactio0_.transaction_type_id=?

select trancode0_.tran_code_id as tran_cod1_0_,
trancode0_.tran_code as tran_code0_,
trancode0_.description as descript3_0_
from tran_code trancode0_
where trancode0_.tran_code_id=?

select transactio0_.tran_status_id as tran_sta1_0_,
transactio0_.description as descript2_0_
from transaction_status transactio0_
where transactio0_.tran_status_id=?


--Non Working version for JcbTransaction
select jcbtransac0_.tran_id as tran_id,
jcbtransac0_.assn_merch_num as assn_me20_,
jcbtransac0_.tran_date as tran_date,
jcbtransac0_.funded_flag as funded_22_,
jcbtransac0_.interchanged_flag as interch23_,
jcbtransac0_.reason as reason,
jcbtransac0_.merch_name as merch_name,
jcbtransac0_.merch_num as merch_num,
jcbtransac0_.ref_num as ref_num,
jcbtransac0_.tran_amt as tran_amt,
jcbtransac0_.report_date as report_d7_,
jcbtransac0_.card_holder_num as card_hol8_,
jcbtransac0_.merch_num_type_id as merch_nu9_,
jcbtransac0_.type_code_id as type_co10_,
jcbtransac0_.tran_code_id as tran_co11_,
jcbtransac0_.tran_status_id as tran_st12_
from transaction jcbtransac0_,
transaction_type transactio1_,
transaction_status transactio2_
where jcbtransac0_.card_type='J'
and ((transactio1_.description='Jcb Funded Outgoing' and jcbtransac0_.type_code_id=transactio1_.transaction_type_id)
and
(transactio2_.description='New' and jcbtransac0_.tran_status_id=transactio2_.tran_status_id))
</pre>


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.