From: Thomas A. (JIRA) <no...@at...> - 2006-06-12 13:02:37
|
Expression.in on component object gives parameters til SQL in wrong order. -------------------------------------------------------------------------- Key: HHH-1832 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH= -1832 Project: Hibernate3 Type: Bug Components: query-criteria =20 Versions: 3.1.2 =20 Environment: Development in IntellIJ IDEA 4.5.3 Database:Oracle 10g Enteprise Edition release 10.1.0.2.0=20 Reporter: Thomas Andersen I'm using an Expression.in on a component class with two attributes (one Lo= ng and one String). When executing the code I an empty list. When using the generated SQL in DBVisualizer adding the variables it return= s the expectet list. Debug log level and reveals (detailed documentation later in description): Parameters are bound in the wrong order: Paramters are bound ... where (this_.ejerlavskode, this_.matrikelnr) in ((9999, 9999), (01, 03)= ) should be 9999, 01, 9999, 03 according to=20 ... where (this_.ejerlavskode, this_.matrikelnr) in ((9999, 01), (9999, 03)= ) Parameter pairs are by class Matrikelbetegnelse(ejerlavskode=3D9999, matrik= enr=3D01) Hibernate version: Hibernate 3.1.2 Mapping documents: <?xml version=3D"1.0" encoding=3D"UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping <class name=3D"Sagsadvarsel" table=3D"sagsadvarsel" > <id name=3D"id" column=3D"id" type=3D"long" > <generator class=3D"native"> <param name=3D"sequence">sagsadvarsel_id_seq</param> </generator> </id> <version name=3D"version" column=3D"version" type=3D"long" /> <property name=3D"datoTid" type=3D"java.util.Date" update=3D"true" insert=3D"true" column=3D"datoTid" not-null=3D"false" /> <component name=3D"matrikelbetegnelse" class=3D"Matrikelbetegnelse" > <property name=3D"ejerlavskode" type=3D"java.lang.Long" update=3D"true" insert=3D"true" column=3D"ejerlavskode" /> <property name=3D"matrikelnr" type=3D"java.lang.String" update=3D"true" insert=3D"true" column=3D"matrikelnr" length=3D"20" /> </component> </class> </hibernate-mapping> Code between sessionFactory.openSession() and session.close(): Long ejerlav =3D new Long(9999); final Matrikelbetegnelse[] matrikelbetegnelser =3D new Matrikelbetegnelse[2= ]; matrikelbetegnelser[0] =3D new Matrikelbetegnelse(ejerlav, "01"); matrikelbetegnelser[1] =3D new Matrikelbetegnelse(ejerlav, "03"); List list =3D session.createCriteria(Sagsadvarsel.class) .add(Expression.in("matrikelbetegnelse",matrikelbetegnelser)) .list(); log.debug("list " + list.size()); import java.util.Date; import java.io.Serializable; /** * @hibernate.class table=3D"sagsadvarsel" */ public class Sagsadvarsel implements Serializable{ private long id; private long version; private Date datoTid; private Matrikelbetegnelse matrikelbetegnelse; /** * @return * @hibernate.id generator-class=3D"native" */ public long getId() { return id; } public void setId(long id) { this.id =3D id; } /** * Udlever versionsnummer for forekomsten. Feltet ajourf=C3=B8res af Hiberna= te, som samtidig bruger det til at * forhindre samtidig opdatering fra to processer. * hibernate.version * @return */ public long getVersion() { return version; } public void setVersion(long version) { this.version =3D version; } /** * Udlever datotid (Dato og tidspunkt for sagsadvarsel). * * @hibernate.property not-null=3D"false" * @return datotid */ public Date getDatoTid() { return datoTid; } public void setDatoTid(Date datoTid) { this.datoTid =3D datoTid; } /** * Udlever Matrikelbetegnelse. * * @hibernate.component */ public Matrikelbetegnelse getMatrikelbetegnelse() { return matrikelbetegnelse; } public void setMatrikelbetegnelse(Matrikelbetegnelse matrikelbetegnelse) { this.matrikelbetegnelse =3D matrikelbetegnelse; } } import java.io.Serializable; /** */ public class Matrikelbetegnelse { private Long ejerlavskode ; private String matrikelnr ; public Matrikelbetegnelse() { } public Matrikelbetegnelse(Long ejerlavskode, String matrikelnummer) { this.ejerlavskode =3D ejerlavskode; this.matrikelnr =3D matrikelnummer; } /** * * @return * @hibernate.property */ public Long getEjerlavskode() { return ejerlavskode; } public void setEjerlavskode(Long ejerlavskode) { this.ejerlavskode =3D ejerlavskode; } /** * * @return * @hibernate.property length=3D"20" */ public String getMatrikelnr() { return matrikelnr; } public void setMatrikelnr(String matrikelnr) { this.matrikelnr =3D matrikelnr; } public boolean equals(Object o) { if (this =3D=3D o) return true; if (!(o instanceof Matrikelbetegnelse)) return false; final Matrikelbetegnelse matrikelbetegnelse =3D (Matrikelbetegnelse) o; if (!ejerlavskode.equals(matrikelbetegnelse.ejerlavskode)) return false; if (!matrikelnr.equals(matrikelbetegnelse.matrikelnr)) return false; return true; } public int hashCode() { int result; result =3D ejerlavskode.hashCode(); result =3D 29 * result + matrikelnr.hashCode(); return result; } } Full stack trace of any exception that occurs: No exception, just an empty result. Name and version of the database you are using: Oracle 10g Enteprise Edition release 10.1.0.2.0 The generated SQL (show_sql=3Dtrue): Hibernate: select this_.id as id34_0_, this_.datoTid as datoTid34_0_, this_= .ejerlavskode as ejerlavs3_34_0_, this_.matrikelnr as matrikelnr34_0_, this= _.fk_sag_id as fk5_34_0_, this_.brugerId as brugerId34_0_, this_.tidsstempe= l as tidsstem7_34_0_, this_.gyldig_fra as gyldig8_34_0_, this_.gyldig_til a= s gyldig9_34_0_, this_.oprind_id as oprind10_34_0_ from tan.sagsadvarsel th= is_ where (this_.ejerlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) Debug level Hibernate log excerpt: 14:02:58,631 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.log(Abstra= ctBatcher.java:346)] select this_.id as id34_1_, this_.version as version34= _1_, this_.datoTid as datoTid34_1_, this_.ejerlavskode as ejerlavs4_34_1_, = this_.matrikelnr as matrikelnr34_1_, this_.fk_sag_id as fk6_34_1_, this_.br= ugerId as brugerId34_1_, this_.tidsstempel as tidsstem8_34_1_, this_.gyldig= _fra as gyldig9_34_1_, this_.gyldig_til as gyldig10_34_1_, this_.oprind_id = as oprind11_34_1_, s1_.id as id15_0_, s1_.version as version15_0_, s1_.sags= Id as sagsId15_0_, s1_.symbolskNavn as symbolsk4_15_0_, s1_.kms_journalnumm= er as kms5_15_0_, s1_.journaliseringsDato as journali6_15_0_, s1_.rekvirent= Ref as rekviren7_15_0_, s1_.enum_sagskategori as enum8_15_0_, s1_.enum_prio= ritet as enum9_15_0_, s1_.tidsfrist as tidsfrist15_0_, s1_.saerligAftale as= saerlig11_15_0_, s1_.matrikelnr as matrikelnr15_0_, s1_.ejerlavskode as ej= erlav13_15_0_, s1_.afventAntalHoeringssvar as afventA14_15_0_, s1_.afventAn= talSupplDok as afventA15_15_0_, s1_.maaIkkeSlettes as maaIkke16_15_0_, s1_.= erForaeldet as erForae17_15_0_, s1_.brugerId as brugerId15_0_, s1_.tidsstem= pel as tidsste19_15_0_, s1_.gyldig_fra as gyldig20_15_0_, s1_.gyldig_til as= gyldig21_15_0_, s1_.oprind_id as oprind22_15_0_, s1_.fk_aktoer_indsender_i= d as fk23_15_0_, s1_.fk_aktoer_rekvirent_id as fk24_15_0_, s1_.fk_aktoer_re= visor_id as fk25_15_0_, s1_.fk_sagsbehandlerteam_id as fk26_15_0_, s1_.fk_s= agspakke_id as fk27_15_0_, s1_.fk_sagsresume_id as fk28_15_0_, s1_.aflysnin= gsmeddelelse as aflysni29_15_0_, s1_.fk_samlesag_id as fk30_15_0_ from tan.= sagsadvarsel this_ inner join tan.sag s1_ on this_.fk_sag_id=3Ds1_.id where= (this_.ejerlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) and not s1_.sag= sId=3D? order by this_.fk_sag_id asc, this_.ejerlavskode asc, this_.matrike= lnr asc Hibernate: select this_.id as id34_1_, this_.version as version34_1_, this_= .datoTid as datoTid34_1_, this_.ejerlavskode as ejerlavs4_34_1_, this_.matr= ikelnr as matrikelnr34_1_, this_.fk_sag_id as fk6_34_1_, this_.brugerId as = brugerId34_1_, this_.tidsstempel as tidsstem8_34_1_, this_.gyldig_fra as gy= ldig9_34_1_, this_.gyldig_til as gyldig10_34_1_, this_.oprind_id as oprind1= 1_34_1_, s1_.id as id15_0_, s1_.version as version15_0_, s1_.sagsId as sags= Id15_0_, s1_.symbolskNavn as symbolsk4_15_0_, s1_.kms_journalnummer as kms5= _15_0_, s1_.journaliseringsDato as journali6_15_0_, s1_.rekvirentRef as rek= viren7_15_0_, s1_.enum_sagskategori as enum8_15_0_, s1_.enum_prioritet as e= num9_15_0_, s1_.tidsfrist as tidsfrist15_0_, s1_.saerligAftale as saerlig11= _15_0_, s1_.matrikelnr as matrikelnr15_0_, s1_.ejerlavskode as ejerlav13_15= _0_, s1_.afventAntalHoeringssvar as afventA14_15_0_, s1_.afventAntalSupplDo= k as afventA15_15_0_, s1_.maaIkkeSlettes as maaIkke16_15_0_, s1_.erForaelde= t as erForae17_15_0_, s1_.brugerId as brugerId15_0_, s1_.tidsstempel as tid= sste19_15_0_, s1_.gyldig_fra as gyldig20_15_0_, s1_.gyldig_til as gyldig21_= 15_0_, s1_.oprind_id as oprind22_15_0_, s1_.fk_aktoer_indsender_id as fk23_= 15_0_, s1_.fk_aktoer_rekvirent_id as fk24_15_0_, s1_.fk_aktoer_revisor_id a= s fk25_15_0_, s1_.fk_sagsbehandlerteam_id as fk26_15_0_, s1_.fk_sagspakke_i= d as fk27_15_0_, s1_.fk_sagsresume_id as fk28_15_0_, s1_.aflysningsmeddelel= se as aflysni29_15_0_, s1_.fk_samlesag_id as fk30_15_0_ from tan.sagsadvars= el this_ inner join tan.sag s1_ on this_.fk_sag_id=3Ds1_.id where (this_.ej= erlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) and not s1_.sagsId=3D? or= der by this_.fk_sag_id asc, this_.ejerlavskode asc, this_.matrikelnr asc 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.getPrepare= dStatement(AbstractBatcher.java:424)] preparing statement 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet(N= ullableType.java:79)] binding '9999' to parameter: 1 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet(N= ullableType.java:79)] binding '9999' to parameter: 2 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet(N= ullableType.java:79)] binding '01' to parameter: 3 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet(N= ullableType.java:79)] binding '03' to parameter: 4 14:02:58,701 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.logOpenRes= ults(AbstractBatcher.java:327)] about to open ResultSet (open ResultSets: 0= , globally: 0) --=20 This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators= .jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Christian B. (JIRA) <no...@at...> - 2006-06-12 13:15:36
|
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1832?pa= ge=3Dcomments#action_23321 ]=20 Christian Bauer commented on HHH-1832: -------------------------------------- Reduce this to an ISOLATED test case, so somebody doesn't need an hour to f= ind out if this is a problem or not. > Expression.in on component object gives parameters til SQL in wrong order= . > -------------------------------------------------------------------------= - > > Key: HHH-1832 > URL: http://opensource.atlassian.com/projects/hibernate/browse/H= HH-1832 > Project: Hibernate3 > Type: Bug > Components: query-criteria > Versions: 3.1.2 > Environment: Development in IntellIJ IDEA 4.5.3 > Database:Oracle 10g Enteprise Edition release 10.1.0.2.0=20 > Reporter: Thomas Andersen > > > I'm using an Expression.in on a component class with two attributes (one = Long and one String). When executing the code I an empty list. > When using the generated SQL in DBVisualizer adding the variables it retu= rns the expectet list. > Debug log level and reveals (detailed documentation later in description)= : > Parameters are bound in the wrong order: > Paramters are bound > ... where (this_.ejerlavskode, this_.matrikelnr) in ((9999, 9999), (01, 0= 3)) > should be 9999, 01, 9999, 03 according to=20 > ... where (this_.ejerlavskode, this_.matrikelnr) in ((9999, 01), (9999, 0= 3)) > Parameter pairs are by class Matrikelbetegnelse(ejerlavskode=3D9999, matr= ikenr=3D01) > Hibernate version: > Hibernate 3.1.2 > Mapping documents: > <?xml version=3D"1.0" encoding=3D"UTF-8"?> > <!DOCTYPE hibernate-mapping PUBLIC > "-//Hibernate/Hibernate Mapping DTD 3.0//EN" > "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> > <hibernate-mapping > <class > name=3D"Sagsadvarsel" > table=3D"sagsadvarsel" > > > <id > name=3D"id" > column=3D"id" > type=3D"long" > > > <generator class=3D"native"> > <param name=3D"sequence">sagsadvarsel_id_seq</param> > </generator> > </id> > <version > name=3D"version" > column=3D"version" > type=3D"long" > /> > <property > name=3D"datoTid" > type=3D"java.util.Date" > update=3D"true" > insert=3D"true" > column=3D"datoTid" > not-null=3D"false" > /> > <component > name=3D"matrikelbetegnelse" > class=3D"Matrikelbetegnelse" > > > <property > name=3D"ejerlavskode" > type=3D"java.lang.Long" > update=3D"true" > insert=3D"true" > column=3D"ejerlavskode" > /> > <property > name=3D"matrikelnr" > type=3D"java.lang.String" > update=3D"true" > insert=3D"true" > column=3D"matrikelnr" > length=3D"20" > /> > </component> > </class> > </hibernate-mapping> > Code between sessionFactory.openSession() and session.close(): > Long ejerlav =3D new Long(9999); > final Matrikelbetegnelse[] matrikelbetegnelser =3D new Matrikelbetegnelse= [2]; > matrikelbetegnelser[0] =3D new Matrikelbetegnelse(ejerlav, "01"); > matrikelbetegnelser[1] =3D new Matrikelbetegnelse(ejerlav, "03"); > List list =3D session.createCriteria(Sagsadvarsel.class) > .add(Expression.in("matrikelbetegnelse",matrikelbetegnelser)) > .list(); > log.debug("list " + list.size()); > import java.util.Date; > import java.io.Serializable; > /** > * @hibernate.class table=3D"sagsadvarsel" > */ > public class Sagsadvarsel implements Serializable{ > private long id; > private long version; > private Date datoTid; > private Matrikelbetegnelse matrikelbetegnelse; > /** > * @return > * @hibernate.id generator-class=3D"native" > */ > public long getId() { > return id; > } > public void setId(long id) { > this.id =3D id; > } > /** > * Udlever versionsnummer for forekomsten. Feltet ajourf=C3=B8res af Hiber= nate, som samtidig bruger det til at > * forhindre samtidig opdatering fra to processer. > * hibernate.version > * @return > */ > public long getVersion() { > return version; > } > public void setVersion(long version) { > this.version =3D version; > } > /** > * Udlever datotid (Dato og tidspunkt for sagsadvarsel). > * > * @hibernate.property not-null=3D"false" > * @return datotid > */ > public Date getDatoTid() { > return datoTid; > } > public void setDatoTid(Date datoTid) { > this.datoTid =3D datoTid; > } > /** > * Udlever Matrikelbetegnelse. > * > * @hibernate.component > */ > public Matrikelbetegnelse getMatrikelbetegnelse() { > return matrikelbetegnelse; > } > public void setMatrikelbetegnelse(Matrikelbetegnelse matrikelbetegnelse) = { > this.matrikelbetegnelse =3D matrikelbetegnelse; > } > } > import java.io.Serializable; > /** > */ > public class Matrikelbetegnelse { > private Long ejerlavskode ; > private String matrikelnr ; > public Matrikelbetegnelse() { > } > public Matrikelbetegnelse(Long ejerlavskode, String matrikelnummer) { > this.ejerlavskode =3D ejerlavskode; > this.matrikelnr =3D matrikelnummer; > } > /** > * > * @return > * @hibernate.property > */ > public Long getEjerlavskode() { > return ejerlavskode; > } > public void setEjerlavskode(Long ejerlavskode) { > this.ejerlavskode =3D ejerlavskode; > } > /** > * > * @return > * @hibernate.property length=3D"20" > */ > public String getMatrikelnr() { > return matrikelnr; > } > public void setMatrikelnr(String matrikelnr) { > this.matrikelnr =3D matrikelnr; > } > public boolean equals(Object o) { > if (this =3D=3D o) return true; > if (!(o instanceof Matrikelbetegnelse)) return false; > final Matrikelbetegnelse matrikelbetegnelse =3D (Matrikelbetegnelse) o; > if (!ejerlavskode.equals(matrikelbetegnelse.ejerlavskode)) return false; > if (!matrikelnr.equals(matrikelbetegnelse.matrikelnr)) return false; > return true; > } > public int hashCode() { > int result; > result =3D ejerlavskode.hashCode(); > result =3D 29 * result + matrikelnr.hashCode(); > return result; > } > } > Full stack trace of any exception that occurs: > No exception, just an empty result. > Name and version of the database you are using: > Oracle 10g Enteprise Edition release 10.1.0.2.0 > The generated SQL (show_sql=3Dtrue): > Hibernate: select this_.id as id34_0_, this_.datoTid as datoTid34_0_, thi= s_.ejerlavskode as ejerlavs3_34_0_, this_.matrikelnr as matrikelnr34_0_, th= is_.fk_sag_id as fk5_34_0_, this_.brugerId as brugerId34_0_, this_.tidsstem= pel as tidsstem7_34_0_, this_.gyldig_fra as gyldig8_34_0_, this_.gyldig_til= as gyldig9_34_0_, this_.oprind_id as oprind10_34_0_ from tan.sagsadvarsel = this_ where (this_.ejerlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) > Debug level Hibernate log excerpt: > 14:02:58,631 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.log(Abst= ractBatcher.java:346)] select this_.id as id34_1_, this_.version as version= 34_1_, this_.datoTid as datoTid34_1_, this_.ejerlavskode as ejerlavs4_34_1_= , this_.matrikelnr as matrikelnr34_1_, this_.fk_sag_id as fk6_34_1_, this_.= brugerId as brugerId34_1_, this_.tidsstempel as tidsstem8_34_1_, this_.gyld= ig_fra as gyldig9_34_1_, this_.gyldig_til as gyldig10_34_1_, this_.oprind_i= d as oprind11_34_1_, s1_.id as id15_0_, s1_.version as version15_0_, s1_.sa= gsId as sagsId15_0_, s1_.symbolskNavn as symbolsk4_15_0_, s1_.kms_journalnu= mmer as kms5_15_0_, s1_.journaliseringsDato as journali6_15_0_, s1_.rekvire= ntRef as rekviren7_15_0_, s1_.enum_sagskategori as enum8_15_0_, s1_.enum_pr= ioritet as enum9_15_0_, s1_.tidsfrist as tidsfrist15_0_, s1_.saerligAftale = as saerlig11_15_0_, s1_.matrikelnr as matrikelnr15_0_, s1_.ejerlavskode as = ejerlav13_15_0_, s1_.afventAntalHoeringssvar as afventA14_15_0_, s1_.afvent= AntalSupplDok as afventA15_15_0_, s1_.maaIkkeSlettes as maaIkke16_15_0_, s1= _.erForaeldet as erForae17_15_0_, s1_.brugerId as brugerId15_0_, s1_.tidsst= empel as tidsste19_15_0_, s1_.gyldig_fra as gyldig20_15_0_, s1_.gyldig_til = as gyldig21_15_0_, s1_.oprind_id as oprind22_15_0_, s1_.fk_aktoer_indsender= _id as fk23_15_0_, s1_.fk_aktoer_rekvirent_id as fk24_15_0_, s1_.fk_aktoer_= revisor_id as fk25_15_0_, s1_.fk_sagsbehandlerteam_id as fk26_15_0_, s1_.fk= _sagspakke_id as fk27_15_0_, s1_.fk_sagsresume_id as fk28_15_0_, s1_.aflysn= ingsmeddelelse as aflysni29_15_0_, s1_.fk_samlesag_id as fk30_15_0_ from ta= n.sagsadvarsel this_ inner join tan.sag s1_ on this_.fk_sag_id=3Ds1_.id whe= re (this_.ejerlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) and not s1_.s= agsId=3D? order by this_.fk_sag_id asc, this_.ejerlavskode asc, this_.matri= kelnr asc > Hibernate: select this_.id as id34_1_, this_.version as version34_1_, thi= s_.datoTid as datoTid34_1_, this_.ejerlavskode as ejerlavs4_34_1_, this_.ma= trikelnr as matrikelnr34_1_, this_.fk_sag_id as fk6_34_1_, this_.brugerId a= s brugerId34_1_, this_.tidsstempel as tidsstem8_34_1_, this_.gyldig_fra as = gyldig9_34_1_, this_.gyldig_til as gyldig10_34_1_, this_.oprind_id as oprin= d11_34_1_, s1_.id as id15_0_, s1_.version as version15_0_, s1_.sagsId as sa= gsId15_0_, s1_.symbolskNavn as symbolsk4_15_0_, s1_.kms_journalnummer as km= s5_15_0_, s1_.journaliseringsDato as journali6_15_0_, s1_.rekvirentRef as r= ekviren7_15_0_, s1_.enum_sagskategori as enum8_15_0_, s1_.enum_prioritet as= enum9_15_0_, s1_.tidsfrist as tidsfrist15_0_, s1_.saerligAftale as saerlig= 11_15_0_, s1_.matrikelnr as matrikelnr15_0_, s1_.ejerlavskode as ejerlav13_= 15_0_, s1_.afventAntalHoeringssvar as afventA14_15_0_, s1_.afventAntalSuppl= Dok as afventA15_15_0_, s1_.maaIkkeSlettes as maaIkke16_15_0_, s1_.erForael= det as erForae17_15_0_, s1_.brugerId as brugerId15_0_, s1_.tidsstempel as t= idsste19_15_0_, s1_.gyldig_fra as gyldig20_15_0_, s1_.gyldig_til as gyldig2= 1_15_0_, s1_.oprind_id as oprind22_15_0_, s1_.fk_aktoer_indsender_id as fk2= 3_15_0_, s1_.fk_aktoer_rekvirent_id as fk24_15_0_, s1_.fk_aktoer_revisor_id= as fk25_15_0_, s1_.fk_sagsbehandlerteam_id as fk26_15_0_, s1_.fk_sagspakke= _id as fk27_15_0_, s1_.fk_sagsresume_id as fk28_15_0_, s1_.aflysningsmeddel= else as aflysni29_15_0_, s1_.fk_samlesag_id as fk30_15_0_ from tan.sagsadva= rsel this_ inner join tan.sag s1_ on this_.fk_sag_id=3Ds1_.id where (this_.= ejerlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) and not s1_.sagsId=3D? = order by this_.fk_sag_id asc, this_.ejerlavskode asc, this_.matrikelnr asc > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.getPrepa= redStatement(AbstractBatcher.java:424)] preparing statement > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet= (NullableType.java:79)] binding '9999' to parameter: 1 > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet= (NullableType.java:79)] binding '9999' to parameter: 2 > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet= (NullableType.java:79)] binding '01' to parameter: 3 > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet= (NullableType.java:79)] binding '03' to parameter: 4 > 14:02:58,701 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.logOpenR= esults(AbstractBatcher.java:327)] about to open ResultSet (open ResultSets:= 0, globally: 0) --=20 This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators= .jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Christian B. (JIRA) <no...@at...> - 2006-06-12 13:15:36
|
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1832?pa= ge=3Dcomments#action_23322 ]=20 Christian Bauer commented on HHH-1832: -------------------------------------- English code/tests would make this a lot easier to test as well. > Expression.in on component object gives parameters til SQL in wrong order= . > -------------------------------------------------------------------------= - > > Key: HHH-1832 > URL: http://opensource.atlassian.com/projects/hibernate/browse/H= HH-1832 > Project: Hibernate3 > Type: Bug > Components: query-criteria > Versions: 3.1.2 > Environment: Development in IntellIJ IDEA 4.5.3 > Database:Oracle 10g Enteprise Edition release 10.1.0.2.0=20 > Reporter: Thomas Andersen > > > I'm using an Expression.in on a component class with two attributes (one = Long and one String). When executing the code I an empty list. > When using the generated SQL in DBVisualizer adding the variables it retu= rns the expectet list. > Debug log level and reveals (detailed documentation later in description)= : > Parameters are bound in the wrong order: > Paramters are bound > ... where (this_.ejerlavskode, this_.matrikelnr) in ((9999, 9999), (01, 0= 3)) > should be 9999, 01, 9999, 03 according to=20 > ... where (this_.ejerlavskode, this_.matrikelnr) in ((9999, 01), (9999, 0= 3)) > Parameter pairs are by class Matrikelbetegnelse(ejerlavskode=3D9999, matr= ikenr=3D01) > Hibernate version: > Hibernate 3.1.2 > Mapping documents: > <?xml version=3D"1.0" encoding=3D"UTF-8"?> > <!DOCTYPE hibernate-mapping PUBLIC > "-//Hibernate/Hibernate Mapping DTD 3.0//EN" > "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> > <hibernate-mapping > <class > name=3D"Sagsadvarsel" > table=3D"sagsadvarsel" > > > <id > name=3D"id" > column=3D"id" > type=3D"long" > > > <generator class=3D"native"> > <param name=3D"sequence">sagsadvarsel_id_seq</param> > </generator> > </id> > <version > name=3D"version" > column=3D"version" > type=3D"long" > /> > <property > name=3D"datoTid" > type=3D"java.util.Date" > update=3D"true" > insert=3D"true" > column=3D"datoTid" > not-null=3D"false" > /> > <component > name=3D"matrikelbetegnelse" > class=3D"Matrikelbetegnelse" > > > <property > name=3D"ejerlavskode" > type=3D"java.lang.Long" > update=3D"true" > insert=3D"true" > column=3D"ejerlavskode" > /> > <property > name=3D"matrikelnr" > type=3D"java.lang.String" > update=3D"true" > insert=3D"true" > column=3D"matrikelnr" > length=3D"20" > /> > </component> > </class> > </hibernate-mapping> > Code between sessionFactory.openSession() and session.close(): > Long ejerlav =3D new Long(9999); > final Matrikelbetegnelse[] matrikelbetegnelser =3D new Matrikelbetegnelse= [2]; > matrikelbetegnelser[0] =3D new Matrikelbetegnelse(ejerlav, "01"); > matrikelbetegnelser[1] =3D new Matrikelbetegnelse(ejerlav, "03"); > List list =3D session.createCriteria(Sagsadvarsel.class) > .add(Expression.in("matrikelbetegnelse",matrikelbetegnelser)) > .list(); > log.debug("list " + list.size()); > import java.util.Date; > import java.io.Serializable; > /** > * @hibernate.class table=3D"sagsadvarsel" > */ > public class Sagsadvarsel implements Serializable{ > private long id; > private long version; > private Date datoTid; > private Matrikelbetegnelse matrikelbetegnelse; > /** > * @return > * @hibernate.id generator-class=3D"native" > */ > public long getId() { > return id; > } > public void setId(long id) { > this.id =3D id; > } > /** > * Udlever versionsnummer for forekomsten. Feltet ajourf=C3=B8res af Hiber= nate, som samtidig bruger det til at > * forhindre samtidig opdatering fra to processer. > * hibernate.version > * @return > */ > public long getVersion() { > return version; > } > public void setVersion(long version) { > this.version =3D version; > } > /** > * Udlever datotid (Dato og tidspunkt for sagsadvarsel). > * > * @hibernate.property not-null=3D"false" > * @return datotid > */ > public Date getDatoTid() { > return datoTid; > } > public void setDatoTid(Date datoTid) { > this.datoTid =3D datoTid; > } > /** > * Udlever Matrikelbetegnelse. > * > * @hibernate.component > */ > public Matrikelbetegnelse getMatrikelbetegnelse() { > return matrikelbetegnelse; > } > public void setMatrikelbetegnelse(Matrikelbetegnelse matrikelbetegnelse) = { > this.matrikelbetegnelse =3D matrikelbetegnelse; > } > } > import java.io.Serializable; > /** > */ > public class Matrikelbetegnelse { > private Long ejerlavskode ; > private String matrikelnr ; > public Matrikelbetegnelse() { > } > public Matrikelbetegnelse(Long ejerlavskode, String matrikelnummer) { > this.ejerlavskode =3D ejerlavskode; > this.matrikelnr =3D matrikelnummer; > } > /** > * > * @return > * @hibernate.property > */ > public Long getEjerlavskode() { > return ejerlavskode; > } > public void setEjerlavskode(Long ejerlavskode) { > this.ejerlavskode =3D ejerlavskode; > } > /** > * > * @return > * @hibernate.property length=3D"20" > */ > public String getMatrikelnr() { > return matrikelnr; > } > public void setMatrikelnr(String matrikelnr) { > this.matrikelnr =3D matrikelnr; > } > public boolean equals(Object o) { > if (this =3D=3D o) return true; > if (!(o instanceof Matrikelbetegnelse)) return false; > final Matrikelbetegnelse matrikelbetegnelse =3D (Matrikelbetegnelse) o; > if (!ejerlavskode.equals(matrikelbetegnelse.ejerlavskode)) return false; > if (!matrikelnr.equals(matrikelbetegnelse.matrikelnr)) return false; > return true; > } > public int hashCode() { > int result; > result =3D ejerlavskode.hashCode(); > result =3D 29 * result + matrikelnr.hashCode(); > return result; > } > } > Full stack trace of any exception that occurs: > No exception, just an empty result. > Name and version of the database you are using: > Oracle 10g Enteprise Edition release 10.1.0.2.0 > The generated SQL (show_sql=3Dtrue): > Hibernate: select this_.id as id34_0_, this_.datoTid as datoTid34_0_, thi= s_.ejerlavskode as ejerlavs3_34_0_, this_.matrikelnr as matrikelnr34_0_, th= is_.fk_sag_id as fk5_34_0_, this_.brugerId as brugerId34_0_, this_.tidsstem= pel as tidsstem7_34_0_, this_.gyldig_fra as gyldig8_34_0_, this_.gyldig_til= as gyldig9_34_0_, this_.oprind_id as oprind10_34_0_ from tan.sagsadvarsel = this_ where (this_.ejerlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) > Debug level Hibernate log excerpt: > 14:02:58,631 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.log(Abst= ractBatcher.java:346)] select this_.id as id34_1_, this_.version as version= 34_1_, this_.datoTid as datoTid34_1_, this_.ejerlavskode as ejerlavs4_34_1_= , this_.matrikelnr as matrikelnr34_1_, this_.fk_sag_id as fk6_34_1_, this_.= brugerId as brugerId34_1_, this_.tidsstempel as tidsstem8_34_1_, this_.gyld= ig_fra as gyldig9_34_1_, this_.gyldig_til as gyldig10_34_1_, this_.oprind_i= d as oprind11_34_1_, s1_.id as id15_0_, s1_.version as version15_0_, s1_.sa= gsId as sagsId15_0_, s1_.symbolskNavn as symbolsk4_15_0_, s1_.kms_journalnu= mmer as kms5_15_0_, s1_.journaliseringsDato as journali6_15_0_, s1_.rekvire= ntRef as rekviren7_15_0_, s1_.enum_sagskategori as enum8_15_0_, s1_.enum_pr= ioritet as enum9_15_0_, s1_.tidsfrist as tidsfrist15_0_, s1_.saerligAftale = as saerlig11_15_0_, s1_.matrikelnr as matrikelnr15_0_, s1_.ejerlavskode as = ejerlav13_15_0_, s1_.afventAntalHoeringssvar as afventA14_15_0_, s1_.afvent= AntalSupplDok as afventA15_15_0_, s1_.maaIkkeSlettes as maaIkke16_15_0_, s1= _.erForaeldet as erForae17_15_0_, s1_.brugerId as brugerId15_0_, s1_.tidsst= empel as tidsste19_15_0_, s1_.gyldig_fra as gyldig20_15_0_, s1_.gyldig_til = as gyldig21_15_0_, s1_.oprind_id as oprind22_15_0_, s1_.fk_aktoer_indsender= _id as fk23_15_0_, s1_.fk_aktoer_rekvirent_id as fk24_15_0_, s1_.fk_aktoer_= revisor_id as fk25_15_0_, s1_.fk_sagsbehandlerteam_id as fk26_15_0_, s1_.fk= _sagspakke_id as fk27_15_0_, s1_.fk_sagsresume_id as fk28_15_0_, s1_.aflysn= ingsmeddelelse as aflysni29_15_0_, s1_.fk_samlesag_id as fk30_15_0_ from ta= n.sagsadvarsel this_ inner join tan.sag s1_ on this_.fk_sag_id=3Ds1_.id whe= re (this_.ejerlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) and not s1_.s= agsId=3D? order by this_.fk_sag_id asc, this_.ejerlavskode asc, this_.matri= kelnr asc > Hibernate: select this_.id as id34_1_, this_.version as version34_1_, thi= s_.datoTid as datoTid34_1_, this_.ejerlavskode as ejerlavs4_34_1_, this_.ma= trikelnr as matrikelnr34_1_, this_.fk_sag_id as fk6_34_1_, this_.brugerId a= s brugerId34_1_, this_.tidsstempel as tidsstem8_34_1_, this_.gyldig_fra as = gyldig9_34_1_, this_.gyldig_til as gyldig10_34_1_, this_.oprind_id as oprin= d11_34_1_, s1_.id as id15_0_, s1_.version as version15_0_, s1_.sagsId as sa= gsId15_0_, s1_.symbolskNavn as symbolsk4_15_0_, s1_.kms_journalnummer as km= s5_15_0_, s1_.journaliseringsDato as journali6_15_0_, s1_.rekvirentRef as r= ekviren7_15_0_, s1_.enum_sagskategori as enum8_15_0_, s1_.enum_prioritet as= enum9_15_0_, s1_.tidsfrist as tidsfrist15_0_, s1_.saerligAftale as saerlig= 11_15_0_, s1_.matrikelnr as matrikelnr15_0_, s1_.ejerlavskode as ejerlav13_= 15_0_, s1_.afventAntalHoeringssvar as afventA14_15_0_, s1_.afventAntalSuppl= Dok as afventA15_15_0_, s1_.maaIkkeSlettes as maaIkke16_15_0_, s1_.erForael= det as erForae17_15_0_, s1_.brugerId as brugerId15_0_, s1_.tidsstempel as t= idsste19_15_0_, s1_.gyldig_fra as gyldig20_15_0_, s1_.gyldig_til as gyldig2= 1_15_0_, s1_.oprind_id as oprind22_15_0_, s1_.fk_aktoer_indsender_id as fk2= 3_15_0_, s1_.fk_aktoer_rekvirent_id as fk24_15_0_, s1_.fk_aktoer_revisor_id= as fk25_15_0_, s1_.fk_sagsbehandlerteam_id as fk26_15_0_, s1_.fk_sagspakke= _id as fk27_15_0_, s1_.fk_sagsresume_id as fk28_15_0_, s1_.aflysningsmeddel= else as aflysni29_15_0_, s1_.fk_samlesag_id as fk30_15_0_ from tan.sagsadva= rsel this_ inner join tan.sag s1_ on this_.fk_sag_id=3Ds1_.id where (this_.= ejerlavskode, this_.matrikelnr) in ((?, ?), (?, ?)) and not s1_.sagsId=3D? = order by this_.fk_sag_id asc, this_.ejerlavskode asc, this_.matrikelnr asc > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.getPrepa= redStatement(AbstractBatcher.java:424)] preparing statement > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet= (NullableType.java:79)] binding '9999' to parameter: 1 > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet= (NullableType.java:79)] binding '9999' to parameter: 2 > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet= (NullableType.java:79)] binding '01' to parameter: 3 > 14:02:58,641 DEBUG [CID=3D ] [org.hibernate.type.NullableType.nullSafeSet= (NullableType.java:79)] binding '03' to parameter: 4 > 14:02:58,701 DEBUG [CID=3D ] [org.hibernate.jdbc.AbstractBatcher.logOpenR= esults(AbstractBatcher.java:327)] about to open ResultSet (open ResultSets:= 0, globally: 0) --=20 This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators= .jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |