[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5072) Invalid SQL produced when using FetchMode.SUBSELECT with SQLServerDialect

Brian R. Jackson (JIRA) noreply at atlassian.com
Thu Jan 20 11:25:05 EST 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5072?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39713#action_39713 ] 

Brian R. Jackson commented on HHH-5072:
---------------------------------------

I experienced this too and looked into the code to see if I could implement a dialect-specific fix.  The root of the cause is that SQL Server (as of 2008) doesn't fully support row value constructor syntax (read more here http://www.sqlmag.com/article/sql-server/Row-Value-Constructor.aspx), and Hibernate doesn't generate correlated subqueries. If you could get Hibernate (see org.hibernate.loader.collection.CollectionJoinWalker) to generate correlated subqueries using WHERE EXISTS, you could do an efficient subselect in SQL Server.

> Invalid SQL produced when using FetchMode.SUBSELECT with SQLServerDialect
> -------------------------------------------------------------------------
>
>                 Key: HHH-5072
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5072
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.5.0-Final
>         Environment: Hibernate core 3.5, JPA 2.0, SQL Server 2005, JDK 1.6
>            Reporter: kabram
>            Priority: Blocker
>
> I have a parent entity with child entities being loaded using SubSelect and eager fetching. I execute a query to retrieve all parents and get the following query which SQL Server 2005 does not support:
> select
> 	childtab0_.CONFIG_KEY as CONFIG5_23_1_, 
> 	childtab0_.QUALIFIER as QUALIFIER23_1_, 
> 	childtab0_.CONFIG_VALUE_ID as CONFIG1_1_, 
> 	childtab0_.CONFIG_VALUE_ID as CONFIG1_24_0_, 
> 	childtab0_.CONFIG_KEY as CONFIG5_24_0_, 
> 	childtab0_.QUALIFIER as QUALIFIER24_0_, 
> 	childtab0_.CONFIG_VALUE as CONFIG2_24_0_, 
> 	childtab0_.IS_ENCRYPTED as IS3_24_0_, 
> 	childtab0_.LIST_ORDER as LIST4_24_0_ 
> from
> 	TEST_CHILD_TABLE childtab0_
> where 
> 	(childtab0_.CONFIG_KEY, childtab0_.QUALIFIER) in 
> 	(select parenttab0_.CONFIG_KEY, parenttab0_.QUALIFIER 
> 	from RSS_NEO_CANYON_CONFIG_KEY parenttab0_ )
> order by 
> 	childtab0_.LIST_ORDER asc
> SQL Server does not like the tuple in the where clause.

-- 
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