Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] @Column / @EmbeddedId generates invalid SQL for Ms SQL Server 2005

Filed: https://bugs.eclipse.org/bugs/show_bug.cgi?id=346729

Tom, can you point me to the implementation class that handles DISTINCT and/or where the bug is?  I'd like to write a short tech article (for my blog) analyzing the problem.  I'm a geek like that.  :)

Thank you for helping me with this.

-John

On Fri, May 20, 2011 at 11:59 AM, Tom Ware <tom.ware@xxxxxxxxxx> wrote:
Hi John,

 It looks like this is a bug.  Please enter a bug.

 The issue is related to our processing of the "distinct" keyword.  You can workaround by not using "distinct".

-Tom

John Manko wrote:
Thanks for the response, Tom.  Here is the version (from server.log):

[EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913)

-john

On Fri, May 20, 2011 at 10:28 AM, Tom Ware <tom.ware@xxxxxxxxxx <mailto:tom.ware@xxxxxxxxxx>> wrote:

   Hi John,

    What version of EclipseLink are you running?  I tried to reproduce
   this on the latest and do not see the issue.

   -Tom

   John Manko wrote:

       I'm trying to understand the intention of the JPA spec and
       EclipseLink's implementation.  The following arose from the
       following Entity.

       Let's say I have the following entity class and embedded-id class:

       @Entity
       public class CityZip implements Serializable {
          @EmbeddedId
          protected CityZipPK cityZipPK;
          @Column
          private String county;
       }

       @Embeddable
       public class CityZipPK implements Serializable {
          @Basic(optional = false)
          @Column(name = "zip")
          private String zip;
          @Basic(optional = false)
          @Column(name = "city")
          private String city;
          @Basic(optional = false)
          @Column(name = "state")
          private String state;
       }

       My JPA query is:
       *SELECT DISTINCT o FROM CityZip o WHERE o.cityZipPK.city = :city
       ORDER BY o.cityZipPK.state, o.cityZipPK.city, o.cityZipPK.zip*


       Everything works fine in SQL Server 2000, but SQL Server 2005
       throws the following error:
       *Server: Msg 209, Level 16, State 1, Line 1
       Ambiguous column name 'state'.
       Server: Msg 209, Level 16, State 1, Line 1
       Ambiguous column name 'city'.
       Server: Msg 209, Level 16, State 1, Line 1
       Ambiguous column name 'zip'.*

       Tracing the query in SQL Manager reveals the following SQL
       statement:
       declare @p1 int
       set @p1=NULL
       exec sp_prepexec @p1 output,N'@P0 nvarchar(4000)',N'SELECT
       DISTINCT city, County, state, zip, state, city, zip FROM cityzip
       WHERE (city = @P0) ORDER BY state ASC, city ASC, zip ASC               ',N'New York'
       select @p1*/

       /*So, the problem is the repeat of city, state and zip in the
       SELECT clause, causing the ORDER BY to get confused.  I read
       something about Compatibility Mode 80 versus 90 for MS SQL, but
       I want to learn more about what should happen with this query.

       Why does EclipseLink include the extra columns?
       Side note: Is there an EclipseLink configuration available to
       prevent this?











       ------------------------------------------------------------------------

       _______________________________________________
       eclipselink-users mailing list
       eclipselink-users@xxxxxxxxxxx <mailto:eclipselink-users@xxxxxxxxxxx>

       https://dev.eclipse.org/mailman/listinfo/eclipselink-users

   _______________________________________________
   eclipselink-users mailing list
   eclipselink-users@xxxxxxxxxxx <mailto:eclipselink-users@xxxxxxxxxxx>

   https://dev.eclipse.org/mailman/listinfo/eclipselink-users



------------------------------------------------------------------------

_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users



--
“If the American people ever allow private banks to control the issue of their currency, first by inflation, then by deflation, the banks...will deprive the people of all property until their children wake-up homeless on the continent their fathers conquered... The issuing power should be taken from the banks and restored to the people, to whom it properly belongs."   -- Thomas Jefferson

Back to the top