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 |