[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-2941) Criteria.createCriteria(associationPath) not works for Key-many-to-one
Gürkan Vural (JIRA)
noreply at atlassian.com
Fri Dec 7 04:08:56 EST 2007
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2941?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_29088 ]
Gürkan Vural commented on HHH-2941:
-----------------------------------
Try to use criteria.setFetchMode("a", FetchMode.JOIN).add(Expression.eq("a.ID", new Integer(4))) to make multi column join.
> Criteria.createCriteria(associationPath) not works for Key-many-to-one
> ----------------------------------------------------------------------
>
> Key: HHH-2941
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2941
> Project: Hibernate3
> Issue Type: Bug
> Components: query-criteria
> Affects Versions: 3.2.4.sp1
> Environment: Hibernate 3.2.4.sp1 + MySQL
> Reporter: Eddie Man
> Attachments: criteria_test.tar.gz
>
>
> Suppose I had 2 class with the following content:
> A.java
> =================
> public class A {
> public A() {
> }
>
> public int ID;
>
> public java.util.Set bs = new java.util.HashSet();
>
> }
> B.java
> =================
> import java.io.Serializable;
> public class B implements Serializable {
> public B() {
> }
>
> public int ID;
>
> public A a;
>
> }
> A.hbm.xml
> =================
> <?xml version="1.0" encoding="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="A" table="A" lazy="false">
> <id name="ID" column="ID" type="integer" unsaved-value="0" access="field">
> <generator class="native">
> </generator>
> </id>
> <set name="bs" lazy="true" cascade="save-update,lock" inverse="true" access="field">
> <key column="AID" not-null="true"/>
> <one-to-many class="B"/>
> </set>
> </class>
> </hibernate-mapping>
> B.hbm.xml
> =================
> <?xml version="1.0" encoding="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="B" table="B" lazy="false">
> <composite-id>
> <key-property name="ID" column="ID" type="integer" access="field"/>
> <key-many-to-one name="a" column="AID" class="A" access="field">
> </key-many-to-one>
> </composite-id>
> </class>
> </hibernate-mapping>
> Now, I want to find the B object with the specify B.ID and A.ID. Here is my code
> Criteria criteria = session.createCriteria(B.class);
> criteria.add(Expression.eq("ID", new Integer(2))); // B.ID = 2
> criteria.createCriteria("a").add(Expression.eq("ID", new Integer(4))); // A.ID = 4
> B b = (B) criteria.uniqueResult();
> I turned on the show_sql in my configure file so that it will prompt all the sql statement in runtime, then executing the code, here is the printout:
> 09:35:59,096 WARN RootClass:211 - composite-id class does not override equals(): B
> 09:35:59,099 WARN RootClass:216 - composite-id class does not override hashCode(): B
> Hibernate:
> select
> this_.ID as ID1_0_,
> this_.AID as AID1_0_
> from
> B this_
> where
> this_.ID=?
> and a1_.ID=?
> 09:35:59,982 WARN JDBCExceptionReporter:77 - SQL Error: 1054, SQLState: 42S22
> 09:35:59,982 ERROR JDBCExceptionReporter:78 - Unknown column 'a1_.ID' in 'where clause'
> Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query
> at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
> at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
> at org.hibernate.loader.Loader.doList(Loader.java:2223)
> at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
> at org.hibernate.loader.Loader.list(Loader.java:2099)
> at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
> at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1571)
> at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
> at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
> at ListTestData.main(ListTestData.java:17)
> Caused by: java.sql.SQLException: Unknown column 'a1_.ID' in 'where clause'
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921)
> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
> at com.mysql.jdbc.Connection.execSQL(Connection.java:2978)
> at com.mysql.jdbc.Connection.execSQL(Connection.java:2902)
> at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:930)
> at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1024)
> at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
> at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
> at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
> at org.hibernate.loader.Loader.doQuery(Loader.java:674)
> at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
> at org.hibernate.loader.Loader.doList(Loader.java:2220)
> ... 7 more
> It look like that the hibernate is missing the join table for the key-many-to-one. I had tested to using <key-property> and <many-to-one insert="false" update="false"> instread of <key-many-to-one>, and get no problem for that, so is it the bug on key many to one?
> The schema and test case is attached.
> Steps of reproduce the problem with the attached project:
> =========
> 1. Execute the schema.ddl in to mysql db.
> 2. Execute java application "InsertTestData"
> 3. Record the last inserted id from the database and modify the "ListTestData" so that the expression value is correct.
> 4. Execute java application "ListTestData"
--
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
More information about the hibernate-issues
mailing list