You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2010/02/25 04:33:00 UTC

svn commit: r916106 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persis...

Author: faywang
Date: Thu Feb 25 03:33:00 2010
New Revision: 916106

URL: http://svn.apache.org/viewvc?rev=916106&view=rev
Log:
OPENJPA-1536: fix the where clause in sql generation problem when join table strategy is used in toOne eager fetch

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/TestJoinTableStrategy.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Department.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Employee.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/FTEmployee.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Manager.java
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/PTEmployee.java
Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java?rev=916106&r1=916105&r2=916106&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java Thu Feb 25 03:33:00 2010
@@ -141,10 +141,10 @@
         Column col = disc.getColumns()[0];
         SQLBuffer sql = new SQLBuffer(sel.getConfiguration().
             getDBDictionaryInstance());
+        String alias = sel.getColumnAlias(col, joins);
         boolean outer = joins != null && joins.isOuter();
         if (outer)
             sql.append("(");
-        String alias = sel.getColumnAlias(col, joins);
         sql.append(alias);
 
         // if not selecting subclasses, limit to just the given class

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/TestJoinTableStrategy.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/TestJoinTableStrategy.java?rev=916106&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/TestJoinTableStrategy.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/TestJoinTableStrategy.java Thu Feb 25 03:33:00 2010
@@ -0,0 +1,87 @@
+/*
+ * 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.inheritance;
+
+import javax.persistence.EntityManager;
+
+import org.apache.openjpa.persistence.inheritance.entity.Department;
+import org.apache.openjpa.persistence.inheritance.entity.Employee;
+import org.apache.openjpa.persistence.inheritance.entity.FTEmployee;
+import org.apache.openjpa.persistence.inheritance.entity.PTEmployee;
+import org.apache.openjpa.persistence.inheritance.entity.Manager;
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+/**
+ * Originally reported in the context of entities of a inheritance hierarchy with
+ * JOIN_TABLE strategy.
+ * 
+ * <A HREF="http://issues.apache.org/jira/browse/OPENJPA-1536">OPENJPA-1536</A>
+ * 
+ * @author Jody Grassel
+ * @author Fay Wang
+ * 
+ */
+public class TestJoinTableStrategy extends SingleEMFTestCase {
+
+	public void setUp() {
+		super.setUp(CLEAR_TABLES, Department.class, Employee.class,
+				PTEmployee.class, FTEmployee.class, Manager.class);
+
+		EntityManager em = emf.createEntityManager();
+		em.getTransaction().begin();
+        Manager m = new Manager();
+        m.setId(1);
+        m.setFirstName("mf1");
+        m.setLastName("ml1");
+        m.setSalary(1000000);
+        m.setVacationDays(20);
+                
+        Department d = new Department();
+        d.setId(1);
+        d.setDepartmentName("d1");
+        d.setDepartmentManager(m);
+        m.setDepartment(d);
+        
+        Employee e1 = new Employee();
+        e1.setId(2);
+        e1.setFirstName("ef1");
+        e1.setLastName("el1");
+        e1.setDepartment(d);
+        e1.setManager(m);
+        e1.setVacationDays(20);
+        
+        em.persist(m);
+        em.persist(d);
+        em.persist(e1);
+		em.getTransaction().commit();
+		em.close();
+	}
+
+	@Override
+	public void tearDown() {
+		// problem deleting table in MySQL
+	}
+
+	public void testFindEntity() {
+		EntityManager em1 = emf.createEntityManager();
+        Manager m = em1.find(Manager.class, 1);
+        assertNotNull(m);
+		em1.close();
+	}
+}

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Department.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Department.java?rev=916106&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Department.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Department.java Thu Feb 25 03:33:00 2010
@@ -0,0 +1,91 @@
+/*
+ * 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.inheritance.entity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+/**
+ * Test case and domain classes were originally part of the reported issue
+ * <A href="https://issues.apache.org/jira/browse/OPENJPA-1536">OPENJPA-1536</A>
+ *  
+ * @author Jody Grassel
+ * @author Fay Wang
+ *
+ */
+@Entity
+@Table(name="CDepartment")
+public class Department {
+    @Id
+    private int id;
+    
+    private String departmentName;
+    
+    @ManyToOne
+    private Manager departmentManager;
+    
+    @OneToMany(mappedBy="department")
+    private List<Employee> employeeList;
+
+    public Department() {
+        this.employeeList = new ArrayList<Employee>();
+    }
+    
+    public Department(int id, String departmentName) {
+        this.employeeList = new ArrayList<Employee>();
+        this.id = id;
+        this.departmentName = departmentName;
+    }
+    
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getDepartmentName() {
+        return departmentName;
+    }
+
+    public void setDepartmentName(String departmentName) {
+        this.departmentName = departmentName;
+    }
+
+    public Manager getDepartmentManager() {
+        return departmentManager;
+    }
+
+    public void setDepartmentManager(Manager departmentManager) {
+        this.departmentManager = departmentManager;
+    }
+
+    public List<Employee> getEmployeeList() {
+        return employeeList;
+    }
+
+
+}

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Employee.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Employee.java?rev=916106&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Employee.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Employee.java Thu Feb 25 03:33:00 2010
@@ -0,0 +1,123 @@
+/*
+ * 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.inheritance.entity;
+
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Version;
+
+/**
+ * Test case and domain classes were originally part of the reported issue
+ * <A href="https://issues.apache.org/jira/browse/OPENJPA-1536">OPENJPA-1536</A>
+ *  
+ * @author Jody Grassel
+ * @author Fay Wang
+ *
+ */
+@Entity
+@Table(name="CEmployee")
+@Inheritance(strategy=InheritanceType.JOINED)
+@DiscriminatorColumn(name="EMP_TYPEL", discriminatorType=DiscriminatorType.INTEGER)
+public class Employee {
+    
+    @Id
+    private int id;
+    
+    private String lastName;
+    private String firstName;
+
+    private int vacationDays;
+    
+    @ManyToOne
+    private Manager manager;
+    
+    @ManyToOne
+    private Department department;
+    
+    @Version
+    private long version;
+    
+    private transient String str = null;
+    
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+        str = null;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+        str = null;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+        str = null;
+    }
+
+    public int getVacationDays() {
+        return vacationDays;
+    }
+
+    public void setVacationDays(int vacationDays) {
+        this.vacationDays = vacationDays;
+        str = null;
+    }
+
+    public Manager getManager() {
+        return manager;
+    }
+
+    public void setManager(Manager manager) {
+        this.manager = manager;
+        str = null;
+    }
+
+    public Department getDepartment() {
+        return department;
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+        str = null;
+    }
+
+    public long getVersion() {
+        return version;
+    }
+
+
+}

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/FTEmployee.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/FTEmployee.java?rev=916106&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/FTEmployee.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/FTEmployee.java Thu Feb 25 03:33:00 2010
@@ -0,0 +1,46 @@
+/*
+ * 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.inheritance.entity;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+
+/**
+ * Test case and domain classes were originally part of the reported issue
+ * <A href="https://issues.apache.org/jira/browse/OPENJPA-1536">OPENJPA-1536</A>
+ *  
+ * @author Jody Grassel
+ * @author Fay Wang
+ *
+ */
+@Entity
+@DiscriminatorValue("2")
+public class FTEmployee extends Employee {
+    private double salary;
+
+    public double getSalary() {
+        return salary;
+    }
+
+    public void setSalary(double salary) {
+        this.salary = salary;
+    }
+
+
+}

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Manager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Manager.java?rev=916106&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Manager.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/Manager.java Thu Feb 25 03:33:00 2010
@@ -0,0 +1,50 @@
+/*
+ * 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.inheritance.entity;
+
+import java.util.List;
+
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+
+/**
+ * Test case and domain classes were originally part of the reported issue
+ * <A href="https://issues.apache.org/jira/browse/OPENJPA-1536">OPENJPA-1536</A>
+ *  
+ * @author Jody Grassel
+ * @author Fay Wang
+ *
+ */
+@Entity
+@DiscriminatorValue("3")
+public class Manager extends FTEmployee {
+    @OneToMany(mappedBy="manager")
+    private List<Employee> managesList;
+
+    public List<Employee> getManagesList() {
+        return managesList;
+    }
+    
+    public String toString() {
+        String str = super.toString();
+        return "Manager " + str;
+    }
+
+}

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/PTEmployee.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/PTEmployee.java?rev=916106&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/PTEmployee.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/inheritance/entity/PTEmployee.java Thu Feb 25 03:33:00 2010
@@ -0,0 +1,47 @@
+/*
+ * 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.inheritance.entity;
+import javax.persistence.*;
+
+/**
+ * Test case and domain classes were originally part of the reported issue
+ * <A href="https://issues.apache.org/jira/browse/OPENJPA-1536">OPENJPA-1536</A>
+ *  
+ * @author Jody Grassel
+ * @author Fay Wang
+ *
+ */
+@Entity
+@DiscriminatorValue("1")
+public class PTEmployee extends Employee {
+    private float hourlyWage;
+    
+    public PTEmployee() {
+        super();
+    }
+    
+    public float getHourlyWage() {
+        return hourlyWage;
+    }
+
+    public void setHourlyWage(float hourlyWage) {
+        this.hourlyWage = hourlyWage;
+    }
+
+}