From: Christoph S. <ch...@mc...> - 2002-07-30 11:57:13
|
Hey all! I have a strange problem: I issue this query in hibernate: String query = "from vtrm in class " + Vtrm.class.getName() + ", shop in vtrm.shops.elements where vtrm.status=5 and shop.shopkz=?"; results = session.find(query, "WAP", Hibernate.STRING); Hibernate issues this select: Hibernate: SELECT DISTINCT vtrm.vtrmid, vtrm.begtag, vtrm.infurl, vtrm.onstat, vtrm.kauter, vtrm.clubnr, vtrm.abldat, vtrm.wvsvor, vtrm.laenge, vtrm.adddte, vtrm.titel2, vtrm.upddte, vtrm.titel1, vtrm.wvspkl, vtrm.preise, vtrm.enduhr, vtrm.addgru, vtrm.updgru, vtrm.inftel, vtrm.listid, vtrm.prliid, vtrm.addusr, vtrm.wv sver, vtrm.updusr, vtrm.minaka, vtrm.beguhr, vtrm.iskind, vtrm.infeml, vtrm.vortid, vtrm.status, vtrm.wvsmnr, vtrm.isclub, vtrm.anzknd, vtrm.ordeml, vtrm.maxaka, vtrm.ntrmid, vtrm.endtag, vtrm.wvssnr, vtrm.wvsmsv, vtrm.stadat, vtrm.vreihe FROM Vtrm vtrm, vtrm_x_shop shop, vtrm_x_shop sho1 WHERE 1=1 and vtrm.vtrmid = sho1.vtrmid and sho1.recnum=shop.recnum AND ( vtrm.status=5 ) and ( shop.shopkz=? ) If I execute this select directly in the db I get 77 results, but Hibernate returns only 11. Another problem is that hibernate uses one more join than it actually should, (the shops table is accessed two times, and joined with itself on the primary key :)) I tried with cvs version and with hibernate 1.01b, both act the same. This is my mapping: <hibernate-mapping> <!-- at.mcg.clubticket.db.Vtrm root --> <class name="at.mcg.clubticket.db.Vtrm" table="Vtrm" select="distinct"> <id name="vtrmid" type="long" column="vtrmid"> <generator class="sequence"/> </id> <!-- basic name="begtag" type="java.lang.Long" --> <property name="begtag" column="begtag" type="long"/> <!-- basic name="infurl" type="java.lang.String" --> <property name="infurl" column="infurl" type="string"/> <!-- basic name="onstat" type="java.lang.Long" --> <property name="onstat" column="onstat" type="long"/> <!-- basic name="kauter" type="java.lang.String" --> <property name="kauter" column="kauter" type="string"/> <!-- basic name="clubnr" type="java.lang.String" --> <property name="clubnr" column="clubnr" type="string"/> <!-- basic name="abldat" type="java.sql.Timestamp" --> <property name="abldat" column="abldat" type="timestamp"/> <!-- basic name="wvsvor" type="java.lang.String" --> <property name="wvsvor" column="wvsvor" type="string"/> <!-- basic name="laenge" type="java.lang.Long" --> <property name="laenge" column="laenge" type="long"/> <!-- basic name="adddte" type="java.sql.Timestamp" --> <property name="adddte" column="adddte" type="timestamp"/> <!-- basic name="titel2" type="java.lang.String" --> <property name="titel2" column="titel2" type="string"/> <!-- basic name="upddte" type="java.sql.Timestamp" --> <property name="upddte" column="upddte" type="timestamp"/> <!-- basic name="titel1" type="java.lang.String" --> <property name="titel1" column="titel1" type="string"/> <!-- basic name="wvspkl" type="java.lang.String" --> <property name="wvspkl" column="wvspkl" type="string"/> <!-- basic name="preise" type="java.lang.String" --> <property name="preise" column="preise" type="string"/> <!-- basic name="enduhr" type="java.lang.Long" --> <property name="enduhr" column="enduhr" type="long"/> <!-- basic name="addgru" type="java.lang.Long" --> <property name="addgru" column="addgru" type="long"/> <!-- basic name="updgru" type="java.lang.Long" --> <property name="updgru" column="updgru" type="long"/> <!-- basic name="inftel" type="java.lang.String" --> <property name="inftel" column="inftel" type="string"/> <!-- basic name="listid" type="java.lang.Long" --> <property name="listid" column="listid" type="long"/> <!-- basic name="prliid" type="java.lang.Long" --> <property name="prliid" column="prliid" type="long"/> <!-- basic name="addusr" type="java.lang.String" --> <property name="addusr" column="addusr" type="string"/> <!-- basic name="wvsver" type="java.lang.String" --> <property name="wvsver" column="wvsver" type="string"/> <!-- basic name="updusr" type="java.lang.String" --> <property name="updusr" column="updusr" type="string"/> <!-- basic name="minaka" type="java.lang.Long" --> <property name="minaka" column="minaka" type="long"/> <!-- basic name="beguhr" type="java.lang.Long" --> <property name="beguhr" column="beguhr" type="long"/> <!-- basic name="iskind" type="java.lang.Long" --> <property name="iskind" column="iskind" type="long"/> <!-- basic name="infeml" type="java.lang.String" --> <property name="infeml" column="infeml" type="string"/> <!-- basic name="vortid" type="java.lang.Long" --> <property name="vortid" column="vortid" type="long"/> <!-- basic name="status" type="java.lang.String" --> <property name="status" column="status" type="string"/> <!-- basic name="wvsmnr" type="java.lang.String" --> <property name="wvsmnr" column="wvsmnr" type="string"/> <!-- basic name="isclub" type="java.lang.Long" --> <property name="isclub" column="isclub" type="long"/> <!-- basic name="anzknd" type="java.lang.Long" --> <property name="anzknd" column="anzknd" type="long"/> <!-- basic name="ordeml" type="java.lang.String" --> <property name="ordeml" column="ordeml" type="string"/> <!-- basic name="maxaka" type="java.lang.Long" --> <property name="maxaka" column="maxaka" type="long"/> <!-- basic name="ntrmid" type="java.lang.Long" --> <property name="ntrmid" column="ntrmid" type="long"/> <!-- basic name="endtag" type="java.lang.Long" --> <property name="endtag" column="endtag" type="long"/> <!-- basic name="wvssnr" type="java.lang.String" --> <property name="wvssnr" column="wvssnr" type="string"/> <!-- basic name="wvsmsv" type="java.lang.String" --> <property name="wvsmsv" column="wvsmsv" type="string"/> <!-- basic name="stadat" type="java.sql.Timestamp" --> <property name="stadat" column="stadat" type="timestamp"/> <!-- basic name="vreihe" type="java.lang.String" --> <property name="vreihe" column="vreihe" type="string"/> <set role="shops" table="vtrm_x_shop" readonly="true" lazy="true"> <key column="vtrmid"/> <one-to-many class="at.mcg.clubticket.db.Vtrm_x_shop"/> </set> </class> <class name="at.mcg.clubticket.db.Vtrm_x_shop" table="vtrm_x_shop" select="distinct"> <id name="recnum" type="long" column="recnum"> <generator class="sequence"/> </id> <!-- basic name="upddte" type="java.sql.Timestamp" --> <property name="upddte" column="upddte" type="timestamp"/> <!-- basic name="shopkz" type="java.lang.String" --> <property name="shopkz" column="shopkz" type="string"/> <!-- basic name="vtrmid" type="java.lang.Long" --> <many-to-one name="vtrm" class="at.mcg.clubticket.db.Vtrm" column="vtrmid" outer-join="true" /> <!-- basic name="status" type="java.lang.String" --> <property name="status" column="status" type="string"/> <!-- basic name="addusr" type="java.lang.String" --> <property name="addusr" column="addusr" type="string"/> <!-- basic name="updusr" type="java.lang.String" --> <property name="updusr" column="updusr" type="string"/> <!-- basic name="addgru" type="java.lang.Long" --> <property name="addgru" column="addgru" type="long"/> <!-- basic name="updgru" type="java.lang.Long" --> <property name="updgru" column="updgru" type="long"/> <!-- basic name="srtpos" type="java.lang.Long" --> <property name="srtpos" column="srtpos" type="long"/> <!-- basic name="adddte" type="java.sql.Timestamp" --> <property name="adddte" column="adddte" type="timestamp"/> </class> </hibernate-mapping> Peace all! chris -- MC Marketing GmbH. IT Services e-mail: cs...@mc... * http://www.mcmarketing.at tel: +4315240140-59 * http://www.clubticket.at fax: +4315240140-50 * http://www.megacard.at mobile:+43664 2353015 * http://www.skatelab.at A-1070 Wien / Kirchengasse 32/1 * http://www.time2bcool.at |