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 |