[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-1650) specific criteria generates incorrect SQL command (missing join)
Alex Borshik (JIRA)
noreply at atlassian.com
Wed Nov 14 06:21:29 EST 2007
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1650?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_28828 ]
Alex Borshik commented on HHH-1650:
-----------------------------------
I managed to work around this issue by setting FetchMode.JOIN on the associations:
session.createCriteria(Message.class)
.add(Restrictions.eq("language", language))
.setFetchMode("messageKey", FetchMode.JOIN)
.createCriteria("messageKey")
.add(Restrictions.isNotNull("key"))
.list();
> specific criteria generates incorrect SQL command (missing join)
> ----------------------------------------------------------------
>
> Key: HHH-1650
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1650
> Project: Hibernate3
> Issue Type: Bug
> Components: core
> Affects Versions: 3.1.3
> Environment: 3.1.3, Oracle 9.1
> Reporter: Martin Zdila
> Priority: Minor
>
> Hello
> Mapping:
> <hibernate-mapping>
> <class name="MessageKey" table="KFE_MESSAGE_KEY">
> <id name="id" column="MESSAGE_KEY_ID" node="@id">
> <generator class="native">
> <param name="sequence">KFE_MESSAGE_KEY_ID_SEQ</param>
> </generator>
> </id>
>
> <property name="key" column="MESSAGE_KEY" not-null="false" />
>
> <map name="messages" cascade="all" inverse="true" order-by="LANGUAGE_ID" embed-xml="false">
> <key column="MESSAGE_KEY_ID" />
> <map-key type="java.lang.String" formula="LANGUAGE_ID" />
> <one-to-many class="Message" />
> </map>
> </class>
> <class name="Message" table="KFE_MESSAGE">
> <composite-id>
> <key-many-to-one name="language" column="LANGUAGE_ID" class="Language" />
> <key-many-to-one name="messageKey" column="MESSAGE_KEY_ID" class="MessageKey" />
> </composite-id>
> <property name="value" column="MESSAGE_VALUE" length="255" />
> </class>
> </hibernate-mapping>
> This doesn't work:
> session.createCriteria(Message.class) .add(Restrictions.eq("language", language)).createCriteria("messageKey").add(Restrictions.isNotNull("key")).list();
> Generated incorrect SQL command:
> select this_.LANGUAGE_ID as LANGUAGE1_2_0_, this_.MESSAGE_KEY_ID as MESSAGE2_2_0_, this_.MESSAGE_VALUE as MESSAGE3_2_0_ from KFE_MESSAGE this_ where this_.LANGUAGE_ID=? and messagekey1_.MESSAGE_KEY is not null
> Error: java.sql.SQLException: ORA-00904: "MESSAGEKEY1_"."MESSAGE_KEY": invalid identifier
> Workaround using HQL works:
> session.createQuery("FROM Message AS msg WHERE msg.messageKey.key IS NOT NULL AND msg.language = :lang").setParameter("lang", language).list();
> Tanks in advance for fixing
--
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