You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by ht...@apache.org on 2015/04/14 00:22:59 UTC

svn commit: r1673300 - in /openjpa/branches/2.1.x: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/

Author: hthomann
Date: Mon Apr 13 22:22:58 2015
New Revision: 1673300

URL: http://svn.apache.org/r1673300
Log:
OPENJPA-2571: Criteria Builder query generates extra alias when using multiselect.

Added:
    openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/
    openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java
    openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java
    openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java
    openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java
    openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java
Modified:
    openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java

Modified: openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?rev=1673300&r1=1673299&r2=1673300&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java (original)
+++ openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java Mon Apr 13 22:22:58 2015
@@ -2894,7 +2894,20 @@ public class SelectImpl
                 if (this.var != null) {
                     this.append(this.var);
                 } else if (this.path == null && this.correlatedVar != null && _sel._dict.isImplicitJoin()) {
-                    this.append(this.correlatedVar);
+                    String str = this.var;
+                    for(Object o : _sel._parent._aliases.keySet()){
+                        if (o instanceof Key) {
+                            Key k = (Key) o;
+                            if (this.correlatedVar.equals(k._path)) {
+                                str = this.correlatedVar;
+                                break;
+                            }
+                        }else if (o.equals(this.correlatedVar)){
+                            str = this.correlatedVar;
+                            break;
+                        }
+                    }
+                    this.append(str);
                 }
                 this.var = null;
                 _outer = false;

Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,452 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="T_DIM_DAY")
+public class DimDay {
+	
+	@Id
+	@Column(name="DAY_KY")
+	private Long key;
+	
+	@Column(name="DAY_DT")
+	private Date date;
+	
+	@Column(name = "DAY_FULL_NM")
+	private String dayFullName;
+	
+	@Column(name = "QTR_FULL_NM")
+	private String qtrFullName;
+	
+	@Column(name = "MNTH_FULL_NM")
+	private String monthFullName;
+
+	@Column(name = "MNTH_SHRT_NM")
+	private String monthName;
+	
+	@Column(name = "YR_NBR") 
+	private String year;
+	
+	@Column(name = "QTR_IN_YR_NBR") 
+	private int quarterInYearNumber;
+	
+	@Column(name = "YR_CD") 
+	private String yearCode;
+	
+	@Column(name = "QTR_CD") 
+	private String quarterCode;
+	
+	@Column(name = "MNTH_CD") 
+	private String monthCode;
+	
+	@Column(name = "MNTH_IN_YR_NBR")
+	private Long monthInYearNumber;
+	
+	@Column(name="CUR_MNTH_IND")
+	private Long currentMonthInd;
+	
+	@Column(name="CUR_QTR_IND")
+	private Long currentQtrInd;
+	
+	@Column(name="CUR_YR_IND")
+	private Long currentYearInd;
+
+	@Column(name="PREV_MNTH_IND")
+	private Long prevMonthInd;
+	
+	@Column(name="PREV_QTR_IND")
+	private Long prevQtrInd;
+	
+	@Column(name="PREV_YR_IND")
+	private Long prevYearInd;
+	
+	@Column(name="CUR_MNTH_IN_PREV_YR_IND")
+	private Long currentMonthVsPrevYearInd;
+	
+	@Column(name="CUR_QTR_IN_PREV_YR_IND")
+	private Long currentQtrVsPrevYearInd;
+	
+	@Column(name="WK_IN_YR_NBR")
+	private Long weekInYear;
+	
+	@Column(name="WK_IN_YR_FULL_NM")
+	private String weekInYearFullNm;
+	
+	@Column(name = "DAY_IN_WK_NBR")
+	private Long dayInWeek;
+
+	@Column(name = "DAY_IN_MNTH_NBR")
+	private Long dayInMonth;
+	
+	@Column(name = "DAY_IN_QTR_NBR")
+	private Long dayInQuarter;
+	
+	@Column(name = "DAY_IN_YR_NBR")
+	private Long dayInYear;
+	
+	@Column(name="EOM_IND")
+	private Long eomInd; 
+	
+	@Column(name="EOQ_IND")
+	private Long eoqInd;
+	
+	@Column(name="EOY_IND")
+	private Long eoyInd; 
+	
+	@Column(name = "ROLL_13_MNTH_IND")
+	private Long roll13MonthInd;
+	
+	@Column(name = "ROLL_4_YRS_IND")
+	private Long roll4YearsInd;
+	
+	@Column(name = "ROLL_5_QTRS_IND")
+	private Long roll5QuartersInd;
+	
+	@Column(name="MNTH_STRT_DAY_KY")
+	private Long monthStrtDate;
+	
+	@Column(name="MNTH_END_DAY_KY")
+	private Long monthEndDate;
+	
+	@Column(name="QTR_STRT_DAY_KY")
+	private Long quarterStrtDate;
+	
+	@Column(name="QTR_END_DAY_KY")
+	private Long quarterEndDate;
+	
+	@Column(name = "YR_STRT_DAY_KY")
+	private Long yearStrtDate;
+	
+	@Column(name = "YR_END_DAY_KY")
+	private Long yearEndDate;
+	
+	public Long getKey() {
+		return key;
+	}
+
+	public void setKey(Long key) {
+		this.key = key;
+	}
+
+	public Date getDate() {
+		return date;
+	}
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+
+	public String getDayFullName() {
+		return dayFullName;
+	}
+
+	public void setDayFullName(String dayFullName) {
+		this.dayFullName = dayFullName;
+	}
+
+	public String getQtrFullName() {
+		return qtrFullName;
+	}
+
+	public void setQtrFullName(String qtrFullName) {
+		this.qtrFullName = qtrFullName;
+	}
+
+	public String getMonthName() {
+		return monthName;
+	}
+
+	public void setMonthFullName(String monthName) {
+		this.monthName = monthName;
+	}
+
+	public String getYear() {
+		return year;
+	}
+
+	public void setYear(String year) {
+		this.year = year;
+	}
+
+	public Long getCurrentMonthInd() {
+		return currentMonthInd;
+	}
+
+	public void setCurrentMonthInd(Long currentMonthInd) {
+		this.currentMonthInd = currentMonthInd;
+	}
+
+	public Long getCurrentQtrInd() {
+		return currentQtrInd;
+	}
+
+	public void setCurrentQtrInd(Long currentQtrInd) {
+		this.currentQtrInd = currentQtrInd;
+	}
+
+	public Long getCurrentYearInd() {
+		return currentYearInd;
+	}
+
+	public void setCurrentYearInd(Long currentYearInd) {
+		this.currentYearInd = currentYearInd;
+	}
+
+	public Long getPrevQtrInd() {
+		return prevQtrInd;
+	}
+
+	public void setPrevQtrInd(Long prevQtrInd) {
+		this.prevQtrInd = prevQtrInd;
+	}
+
+	public Long getPrevYearInd() {
+		return prevYearInd;
+	}
+
+	public void setPrevYearInd(Long prevYearInd) {
+		this.prevYearInd = prevYearInd;
+	}
+
+	public Long getCurrentMonthVsPrevYearInd() {
+		return currentMonthVsPrevYearInd;
+	}
+
+	public void setCurrentMonthVsPrevYearInd(Long currentMonthVsPrevYearInd) {
+		this.currentMonthVsPrevYearInd = currentMonthVsPrevYearInd;
+	}
+
+	public Long getCurrentQtrVsPrevYearInd() {
+		return currentQtrVsPrevYearInd;
+	}
+
+	public void setCurrentQtrVsPrevYearInd(Long currentQtrVsPrevYearInd) {
+		this.currentQtrVsPrevYearInd = currentQtrVsPrevYearInd;
+	}
+
+	public Long getPrevMonthInd() {
+		return prevMonthInd;
+	}
+
+	public void setPrevMonthInd(Long prevMonthInd) {
+		this.prevMonthInd = prevMonthInd;
+	}
+
+	public Long getWeekInYear() {
+		return weekInYear;
+	}
+
+	public void setWeekInYear(Long weekInYear) {
+		this.weekInYear = weekInYear;
+	}
+
+	public void setMonthName(String monthName) {
+		this.monthName = monthName;
+	}
+
+	public Long getEomInd() {
+		return eomInd;
+	}
+
+	public void setEomInd(Long eomInd) {
+		this.eomInd = eomInd;
+	}
+
+	public String getYearCode() {
+		return yearCode;
+	}
+
+	public void setYearCode(String yearCode) {
+		this.yearCode = yearCode;
+	}
+
+	public String getQuarterCode() {
+		return quarterCode;
+	}
+
+	public void setQuarterCode(String quarterCode) {
+		this.quarterCode = quarterCode;
+	}
+
+	public String getMonthCode() {
+		return monthCode;
+	}
+
+	public void setMonthCode(String monthCode) {
+		this.monthCode = monthCode;
+	}
+
+	public String getMonthFullName() {
+		return monthFullName;
+	}
+
+	public String getWeekInYearFullNm() {
+		return weekInYearFullNm;
+	}
+
+	public void setWeekInYearFullNm(String weekInYearFullNm) {
+		this.weekInYearFullNm = weekInYearFullNm;
+	}
+
+	public Long getMonthInYearNumber() {
+		return monthInYearNumber;
+	}
+
+	public void setMonthInYearNumber(Long monthInYearNumber) {
+		this.monthInYearNumber = monthInYearNumber;
+	}
+
+	public int getQuarterInYearNumber() {
+		return quarterInYearNumber;
+	}
+
+	public void setQuarterInYearNumber(int quarterInYearNumber) {
+		this.quarterInYearNumber = quarterInYearNumber;
+	}
+
+	public Long getRoll13MonthInd() {
+		return roll13MonthInd;
+	}
+
+	public void setRoll13MonthInd(Long roll13MonthInd) {
+		this.roll13MonthInd = roll13MonthInd;
+	}
+
+	public Long getRoll4YearsInd() {
+		return roll4YearsInd;
+	}
+
+	public void setRoll4YearsInd(Long roll4YearsInd) {
+		this.roll4YearsInd = roll4YearsInd;
+	}
+
+	public Long getRoll5QuartersInd() {
+		return roll5QuartersInd;
+	}
+
+	public void setRoll5QuartersInd(Long roll5QuartersInd) {
+		this.roll5QuartersInd = roll5QuartersInd;
+	}
+
+	public Long getDayInMonth() {
+		return dayInMonth;
+	}
+
+	public void setDayInMonth(Long dayInMonth) {
+		this.dayInMonth = dayInMonth;
+	}
+
+	public Long getDayInQuarter() {
+		return dayInQuarter;
+	}
+
+	public void setDayInQuarter(Long dayInQuarter) {
+		this.dayInQuarter = dayInQuarter;
+	}
+
+	public Long getDayInYear() {
+		return dayInYear;
+	}
+
+	public void setDayInYear(Long dayInYear) {
+		this.dayInYear = dayInYear;
+	}
+
+	public Long getEoqInd() {
+		return eoqInd;
+	}
+
+	public void setEoqInd(Long eoqInd) {
+		this.eoqInd = eoqInd;
+	}
+
+	public Long getEoyInd() {
+		return eoyInd;
+	}
+
+	public void setEoyInd(Long eoyInd) {
+		this.eoyInd = eoyInd;
+	}
+
+	public Long getMonthStrtDate() {
+		return monthStrtDate;
+	}
+
+	public void setMonthStrtDate(Long monthStrtDate) {
+		this.monthStrtDate = monthStrtDate;
+	}
+
+	public Long getMonthEndDate() {
+		return monthEndDate;
+	}
+
+	public void setMonthEndDate(Long monthEndDate) {
+		this.monthEndDate = monthEndDate;
+	}
+
+	public Long getQuarterStrtDate() {
+		return quarterStrtDate;
+	}
+
+	public void setQuarterStrtDate(Long quarterStrtDate) {
+		this.quarterStrtDate = quarterStrtDate;
+	}
+
+	public Long getQuarterEndDate() {
+		return quarterEndDate;
+	}
+
+	public void setQuarterEndDate(Long quarterEndDate) {
+		this.quarterEndDate = quarterEndDate;
+	}
+
+	public Long getYearStrtDate() {
+		return yearStrtDate;
+	}
+
+	public void setYearStrtDate(Long yearStrtDate) {
+		this.yearStrtDate = yearStrtDate;
+	}
+
+	public Long getYearEndDate() {
+		return yearEndDate;
+	}
+
+	public void setYearEndDate(Long yearEndDate) {
+		this.yearEndDate = yearEndDate;
+	}
+
+	public Long getDayInWeek() {
+		return dayInWeek;
+	}
+
+	public void setDayInWeek(Long dayInWeek) {
+		this.dayInWeek = dayInWeek;
+	}
+
+
+}

Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.lang.Integer;
+import java.lang.Long;
+import java.lang.String;
+import java.util.Date;
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=DimDay.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon Feb 23 16:53:34 MST 2015")
+public class DimDay_ {
+    public static volatile SingularAttribute<DimDay,Long> currentMonthInd;
+    public static volatile SingularAttribute<DimDay,Long> currentMonthVsPrevYearInd;
+    public static volatile SingularAttribute<DimDay,Long> currentQtrInd;
+    public static volatile SingularAttribute<DimDay,Long> currentQtrVsPrevYearInd;
+    public static volatile SingularAttribute<DimDay,Long> currentYearInd;
+    public static volatile SingularAttribute<DimDay,Date> date;
+    public static volatile SingularAttribute<DimDay,String> dayFullName;
+    public static volatile SingularAttribute<DimDay,Long> dayInMonth;
+    public static volatile SingularAttribute<DimDay,Long> dayInQuarter;
+    public static volatile SingularAttribute<DimDay,Long> dayInWeek;
+    public static volatile SingularAttribute<DimDay,Long> dayInYear;
+    public static volatile SingularAttribute<DimDay,Long> eomInd;
+    public static volatile SingularAttribute<DimDay,Long> eoqInd;
+    public static volatile SingularAttribute<DimDay,Long> eoyInd;
+    public static volatile SingularAttribute<DimDay,Long> key;
+    public static volatile SingularAttribute<DimDay,String> monthCode;
+    public static volatile SingularAttribute<DimDay,Long> monthEndDate;
+    public static volatile SingularAttribute<DimDay,String> monthFullName;
+    public static volatile SingularAttribute<DimDay,Long> monthInYearNumber;
+    public static volatile SingularAttribute<DimDay,String> monthName;
+    public static volatile SingularAttribute<DimDay,Long> monthStrtDate;
+    public static volatile SingularAttribute<DimDay,Long> prevMonthInd;
+    public static volatile SingularAttribute<DimDay,Long> prevQtrInd;
+    public static volatile SingularAttribute<DimDay,Long> prevYearInd;
+    public static volatile SingularAttribute<DimDay,String> qtrFullName;
+    public static volatile SingularAttribute<DimDay,String> quarterCode;
+    public static volatile SingularAttribute<DimDay,Long> quarterEndDate;
+    public static volatile SingularAttribute<DimDay,Integer> quarterInYearNumber;
+    public static volatile SingularAttribute<DimDay,Long> quarterStrtDate;
+    public static volatile SingularAttribute<DimDay,Long> roll13MonthInd;
+    public static volatile SingularAttribute<DimDay,Long> roll4YearsInd;
+    public static volatile SingularAttribute<DimDay,Long> roll5QuartersInd;
+    public static volatile SingularAttribute<DimDay,Long> weekInYear;
+    public static volatile SingularAttribute<DimDay,String> weekInYearFullNm;
+    public static volatile SingularAttribute<DimDay,String> year;
+    public static volatile SingularAttribute<DimDay,String> yearCode;
+    public static volatile SingularAttribute<DimDay,Long> yearEndDate;
+    public static volatile SingularAttribute<DimDay,Long> yearStrtDate;
+}

Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,308 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "T_FACT_WORK_ASGNMT")
+public class FactWorkAssignment {
+	@Id
+	@Column(name = "CLNT_OBJ_ID")
+	private String orgOID;
+	
+	@Column(name = "rec_eff_strt_dt")
+	private Date effStartDt;
+	
+	@Column(name = "rec_eff_end_dt")
+	private Date effEndDt;
+	
+	
+	@Column(name = "rec_eff_strt_day_ky")
+	private Long effectiveStartDate;
+	
+	@Column(name = "rec_eff_end_day_ky")
+	private Long effectiveEndDate;
+	
+	@Column(name = "pers_ky")
+	private Long personKey;
+	
+	@Column(name = "pers_obj_id")
+	private String personObjId;
+	
+	@Column(name = "prmry_work_asgnmt_ind")
+	private int primary;
+
+	@Column(name = "empl_cnt")
+	private int employeeCount;
+	
+	@Column(name = "work_asgnmt_stus_cd")
+	private String statusCode;
+	
+	@Column(name="WORK_ASGNMT_STUS_DSC")
+	private String statusDesc;	
+	
+	@Column(name="WORK_ASGNMT_NBR")
+	private String workAssgnmntNbr;	
+
+	@Column(name = "work_loc_ky")
+	private Long workLocationKey;
+	
+	@Column(name = "hr_orgn_ky")
+	private Long hrOrgKey;
+	
+	@Column(name = "PAYRL_ORGN_KY")
+	private Long payrollOrgKey;
+		
+	@Column(name = "job_ky")
+	private Long jobKey;
+
+	@Column(name = "PERS_PRFL_ATTR_KY")
+	private Long personProfileKey;
+	
+	@Column(name = "mngr_ky")
+	private Long managerKey;
+
+	@Column(name = "PAY_GRP_KY")
+	private Long paygroupKey;
+
+	@Column(name = "SAL_PLAN_KY")
+	private Long salPlanKey;
+	
+	@Column(name = "COMPA_RT")
+	private Double compaRt;
+	
+	@Column(name="CLK_NBR")
+	private String clockNumber;
+	
+	@Column(name="DATA_CNTL_NBR")
+	private String dataCntrlNumber;
+	
+	@Column(name="SEC_CLR_CD")
+	private String secClrCd;
+	
+	@Column(name = "CUR_REC_IND")
+	private boolean currentRecord;
+	
+	public Long getSalPlanKey() {
+		return salPlanKey;
+	}
+
+	public void setSalPlanKey(Long salPlanKey) {
+		this.salPlanKey = salPlanKey;
+	}
+
+	public Long getManagerKey() {
+		return managerKey;
+	}
+
+	public void setManagerKey(Long managerKey) {
+		this.managerKey = managerKey;
+	}
+
+	public Long getPersonProfileKey() {
+		return personProfileKey;
+	}
+
+	public void setPersonProfileKey(Long personProfileKey) {
+		this.personProfileKey = personProfileKey;
+	}
+
+	public int getPrimary() {
+		return primary;
+	}
+
+	public void setPrimary(int primary) {
+		this.primary = primary;
+	}
+
+	public int getEmployeeCount() {
+		return employeeCount;
+	}
+
+	public void setEmployeeCount(int employeeCount) {
+		this.employeeCount = employeeCount;
+	}
+
+	public String getStatusCode() {
+		return statusCode;
+	}
+
+	public void setStatusCode(String statusCode) {
+		this.statusCode = statusCode;
+	}
+	
+	public String getStatusDesc() {
+		return statusDesc;
+	}
+
+	public void setStatusDesc(String statusDesc) {
+		this.statusDesc = statusDesc;
+	}
+
+	public Long getWorkLocationKey() {
+		return workLocationKey;
+	}
+
+	public void setWorkLocationKey(Long workLocationKey) {
+		this.workLocationKey = workLocationKey;
+	}
+
+	public Long getHrOrgKey() {
+		return hrOrgKey;
+	}
+
+	public void setHrOrgKey(Long hrOrgKey) {
+		this.hrOrgKey = hrOrgKey;
+	}
+
+	public Long getJobKey() {
+		return jobKey;
+	}
+
+	public void setJobKey(Long jobKey) {
+		this.jobKey = jobKey;
+	}
+
+	public Long getPayrollOrgKey() {
+		return payrollOrgKey;
+	}
+
+	public void setPayrollOrgKey(Long payrollOrgKey) {
+		this.payrollOrgKey = payrollOrgKey;
+	}
+
+	public Double getCompaRt() {
+		return compaRt;
+	}
+
+	public void setCompaRt(Double compaRt) {
+		this.compaRt = compaRt;
+	}
+
+	public Long getPaygroupKey() {
+		return paygroupKey;
+	}
+
+	public void setPaygroupKey(Long paygroupKey) {
+		this.paygroupKey = paygroupKey;
+	}
+
+	public String getClockNumber() {
+		return clockNumber;
+	}
+
+	public void setClockNumber(String clockNumber) {
+		this.clockNumber = clockNumber;
+	}
+
+	public String getDataCntrlNumber() {
+		return dataCntrlNumber;
+	}
+
+	public void setDataCntrlNumber(String dataCntrlNumber) {
+		this.dataCntrlNumber = dataCntrlNumber;
+	}
+
+	public String getSecClrCd() {
+		return secClrCd;
+	}
+
+	public void setSecClrCd(String secClrCd) {
+		this.secClrCd = secClrCd;
+	}
+
+	public boolean isCurrentRecord() {
+		return currentRecord;
+	}
+
+	public void setCurrentRecord(boolean currentRecord) {
+		this.currentRecord = currentRecord;
+	}
+
+	public String getWorkAssgnmntNbr() {
+		return workAssgnmntNbr;
+	}
+
+	public void setWorkAssgnmntNbr(String workAssgnmntNbr) {
+		this.workAssgnmntNbr = workAssgnmntNbr;
+	}
+
+	public String getOrgOID() {
+		return orgOID;
+	}
+
+	public void setOrgOID(String orgOID) {
+		this.orgOID = orgOID;
+	}
+
+	public Long getEffectiveStartDate() {
+		return effectiveStartDate;
+	}
+
+	public void setEffectiveStartDate(Long effectiveStartDate) {
+		this.effectiveStartDate = effectiveStartDate;
+	}
+
+	public Long getEffectiveEndDate() {
+		return effectiveEndDate;
+	}
+
+	public void setEffectiveEndDate(Long effectiveEndDate) {
+		this.effectiveEndDate = effectiveEndDate;
+	}
+
+	public Long getPersonKey() {
+		return personKey;
+	}
+
+	public void setPersonKey(Long personKey) {
+		this.personKey = personKey;
+	}
+
+	public String getPersonObjId() {
+		return personObjId;
+	}
+
+	public void setPersonObjId(String personObjId) {
+		this.personObjId = personObjId;
+	}
+
+	public Date getEffStartDt() {
+		return effStartDt;
+	}
+
+	public void setEffStartDt(Date effStartDt) {
+		this.effStartDt = effStartDt;
+	}
+
+	public Date getEffEndDt() {
+		return effEndDt;
+	}
+
+	public void setEffEndDt(Date effEndDt) {
+		this.effEndDt = effEndDt;
+	}
+	
+}

Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.lang.Boolean;
+import java.lang.Double;
+import java.lang.Integer;
+import java.lang.Long;
+import java.lang.String;
+import java.util.Date;
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=FactWorkAssignment.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon Feb 23 16:16:50 MST 2015")
+public class FactWorkAssignment_ {
+    public static volatile SingularAttribute<FactWorkAssignment,String> clockNumber;
+    public static volatile SingularAttribute<FactWorkAssignment,Double> compaRt;
+    public static volatile SingularAttribute<FactWorkAssignment,Boolean> currentRecord;
+    public static volatile SingularAttribute<FactWorkAssignment,String> dataCntrlNumber;
+    public static volatile SingularAttribute<FactWorkAssignment,Date> effEndDt;
+    public static volatile SingularAttribute<FactWorkAssignment,Date> effStartDt;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> effectiveEndDate;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> effectiveStartDate;
+    public static volatile SingularAttribute<FactWorkAssignment,Integer> employeeCount;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> hrOrgKey;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> jobKey;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> managerKey;
+    public static volatile SingularAttribute<FactWorkAssignment,String> orgOID;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> paygroupKey;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> payrollOrgKey;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> personKey;
+    public static volatile SingularAttribute<FactWorkAssignment,String> personObjId;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> personProfileKey;
+    public static volatile SingularAttribute<FactWorkAssignment,Integer> primary;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> salPlanKey;
+    public static volatile SingularAttribute<FactWorkAssignment,String> secClrCd;
+    public static volatile SingularAttribute<FactWorkAssignment,String> statusCode;
+    public static volatile SingularAttribute<FactWorkAssignment,String> statusDesc;
+    public static volatile SingularAttribute<FactWorkAssignment,String> workAssgnmntNbr;
+    public static volatile SingularAttribute<FactWorkAssignment,Long> workLocationKey;
+}

Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Tuple;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Selection;
+import javax.persistence.criteria.Subquery;
+
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
+
+public class TestCriteriaMultiselectAliasing extends SQLListenerTestCase {
+    CriteriaQuery<Tuple> critQuery;
+    String critQueryString;
+
+    String doCB = System.getProperty("doCB");
+    
+    @Override
+    public void setUp() throws Exception {
+        // Only run on Oracle....the asserts at this time look for SQL specific to the
+        // way things are generated for Oracle.
+        setSupportedDatabases(
+            org.apache.openjpa.jdbc.sql.OracleDictionary.class);
+        if (isTestsDisabled()) {
+            return;
+        }
+
+        super.setUp(DimDay.class, FactWorkAssignment.class
+            ,"openjpa.Log","SQL=TRACE,Tests=TRACE", "openjpa.ConnectionFactoryProperties",
+            "PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=72"
+            );
+        
+        critQuery = createCriteriaBuilder();
+        critQueryString = critQuery.toString();
+        System.out.println("critQueryString = " + critQueryString);
+    }
+
+    public void test (){
+        if ("true".equals(doCB)){
+            this.ttestCriteriaQuery();
+        }
+        else{
+            this.ttestGeneratedCriteriaQueryString();
+        }
+        
+    }
+    /**
+     * This method produce wrong query like (note the extra T_DIM_DAY t3):
+     * SELECT t0.empl_cnt FROM
+     * T_FACT_WORK_ASGNMT t0, T_DIM_DAY t1, T_DIM_DAY t3 
+     * WHERE (t0.CLNT_OBJ_ID = ? AND t1.ROLL_13_MNTH_IND = ? AND t0.pers_obj_id IN (
+     *     SELECT t2.pers_obj_id FROM T_FACT_WORK_ASGNMT t2 WHERE (t2.CLNT_OBJ_ID = ? AND
+     *     t3.MNTH_STRT_DAY_KY >= ?))) 
+     * [params=(String) dummy1, (int) 1, (String) dummy1, (long) 20150201]
+     * 
+     * The correct query should be:
+     * SELECT t0.empl_cnt FROM
+     * T_FACT_WORK_ASGNMT t0, T_DIM_DAY t1 
+     * WHERE (t0.CLNT_OBJ_ID = ? AND t1.ROLL_13_MNTH_IND = ? AND t0.pers_obj_id IN (
+     *     SELECT t2.pers_obj_id FROM T_FACT_WORK_ASGNMT t2 WHERE (t2.CLNT_OBJ_ID = ? AND
+     *     t3.MNTH_STRT_DAY_KY >= ?))) 
+     * [params=(String) dummy1, (int) 1, (String) dummy1, (long) 20150201]
+     * 
+     */
+    public void ttestCriteriaQuery() {
+        EntityManager em = emf.createEntityManager();     
+        resetSQL();
+        em.createQuery(critQuery).getResultList();
+        assertNotSQL(".*T_DIM_DAY t3.*");
+        assertSQL(".*T_DIM_DAY t1.*");        
+        em.close();
+    }
+
+    /** 
+     * If we execute just the string generated by Criteria Builder, we 
+     * do not see an extra alias.  We see:
+     * SELECT t0.empl_cnt FROM T_FACT_WORK_ASGNMT t0, T_DIM_DAY t1 
+     * WHERE (t0.CLNT_OBJ_ID = ? AND t1.ROLL_13_MNTH_IND = ? AND 
+     *   t0.pers_obj_id IN (SELECT t2.pers_obj_id FROM 
+     *   T_FACT_WORK_ASGNMT t2 WHERE (t2.CLNT_OBJ_ID = ? AND 
+     *   t1.MNTH_STRT_DAY_KY = ?))) 
+     */
+    public void ttestGeneratedCriteriaQueryString(){
+        if (!"true".equals(doCB)){
+        EntityManager em = emf.createEntityManager();
+        System.out.println("NOT doing CB");
+        resetSQL();
+        em.createQuery(critQueryString).getResultList();
+        assertNotSQL(".*T_DIM_DAY t3.*");
+        assertSQL(".*T_DIM_DAY t1.*");
+        em.close();
+        }
+    }
+    
+    public CriteriaQuery<Tuple> createCriteriaBuilder(){
+            EntityManager em = emf.createEntityManager();
+            
+            List<Predicate> predicates = new ArrayList<Predicate>();
+            CriteriaBuilder cb = em.getCriteriaBuilder();
+            CriteriaQuery<Tuple> cq = cb.createTupleQuery();
+            Root<DimDay> day = cq.from(DimDay.class);   
+
+            Root<FactWorkAssignment> wa =  cq.from(FactWorkAssignment.class);
+            
+            predicates.add(cb.equal(wa.get(FactWorkAssignment_.orgOID), "dummy1"));
+            predicates.add(cb.equal(day.get(DimDay_.roll13MonthInd), 1));
+            
+            Subquery<String> subQuery = cq.subquery(String.class);
+
+            Root<FactWorkAssignment> wa1 = subQuery.from(FactWorkAssignment.class);
+
+            subQuery.select(wa1.get(FactWorkAssignment_.personObjId));
+            List<Predicate> subQueryPredicates = new ArrayList<Predicate>();
+            subQueryPredicates.add(cb.equal(wa1.get(FactWorkAssignment_.orgOID), "dummy1"));
+
+            //Removing this seem to "fix" the issue....I think the fact that we use 'day' from 
+            //the 'outer' query has an affect....is it OK to use 'day' from the outer query??   I'm 
+            //assuming so since 'testGeneratedCriteriaQueryString' generates the expected SQL. 
+//            subQueryPredicates.add(cb.greaterThanOrEqualTo(day.get(DimDay_.monthStrtDate), new Long(20150201L)));
+            subQueryPredicates.add(cb.equal(day.get(DimDay_.monthStrtDate), new Long(20150201L)));
+            
+            //Doing this places the 'T_DIM_DAY t3' in the 'inner'/sub query.  Is this the proper solution??  Or just a
+            //hacky work around?  
+            //Root<DimDay> day2 =  subQuery.from(DimDay.class);
+            //subQueryPredicates.add(cb.greaterThanOrEqualTo(day2.get(DimDay_.monthStrtDate), new Long(20150201L)));
+            
+            subQuery.where(subQueryPredicates.toArray(new Predicate[] {}));
+
+            Predicate predicate = wa.get(FactWorkAssignment_.personObjId).in(subQuery);
+            
+            predicates.add(predicate);
+            
+            List<Selection<?>> selections = new ArrayList<Selection<?>>();
+            
+            Expression<Integer> expHC = wa.get(FactWorkAssignment_.employeeCount);
+            selections.add(expHC);
+
+            cq.multiselect(selections).where(predicates.toArray(new Predicate[] {}));
+            
+            return cq;
+        }
+}