Author: fancy
Date: Thu Mar 19 17:33:03 2009
New Revision: 756104
URL: http://svn.apache.org/viewvc?rev=756104&view=rev
Log:
OPENJPA-967 JPA2 add support for collection valued path thru KEY appear in FROM
clause
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/PCPath.java
Thu Mar 19 17:33:03 2009
@@ -251,7 +251,8 @@
if (pstate.field.getKey().getTypeCode() == JavaTypes.PC)
return pstate.field.getKeyMapping().getTypeMapping();
return null;
- }
+ } else if (_keyPath)
+ return pstate.field.getDefiningMapping();
if (pstate.field.getElement().getTypeCode() == JavaTypes.PC)
return pstate.field.getElementMapping().getTypeMapping();
if (pstate.field.getTypeCode() == JavaTypes.PC)
@@ -483,9 +484,6 @@
if (key && !itr.hasNext())
field = pstate.field;
- if (_keyPath)
- pstate.field = field;
-
if (pstate.field != null) {
// if this is the second-to-last field and the last is
// the related field this field joins to, no need to
@@ -720,27 +718,12 @@
selectColumns(sel, ctx, state, pks);
}
- private SQLBuffer getColumns(Select sel, ExpContext ctx, ExpState state) {
- Column[] cols = getColumns(state);
- SQLBuffer buf = new SQLBuffer(ctx.store.getDBDictionary());
- for (int i = 0; i < cols.length; i++) {
- buf.append(sel.getColumnAlias(cols[i], this));
- if (i > 0)
- buf.append(",");
- }
- return buf;
- }
-
public void selectColumns(Select sel, ExpContext ctx, ExpState state,
boolean pks) {
ClassMapping mapping = getClassMapping(state);
PathExpState pstate = (PathExpState) state;
- if (mapping == null || !pstate.joinedRel) {
- if (_keyPath)
- sel.select(getColumns(sel, ctx, state), this);
- else
- sel.select(getColumns(state), pstate.joins);
- }
+ if (mapping == null || !pstate.joinedRel || _keyPath)
+ sel.select(getColumns(state), pstate.joins);
else if (pks)
sel.select(mapping.getPrimaryKeyColumns(), pstate.joins);
else {
@@ -759,11 +742,8 @@
public void groupBy(Select sel, ExpContext ctx, ExpState state) {
ClassMapping mapping = getClassMapping(state);
PathExpState pstate = (PathExpState) state;
- if (mapping == null || !pstate.joinedRel)
- if (_keyPath)
- sel.groupBy(getColumns(sel, ctx, state));
- else
- sel.groupBy(getColumns(state), sel.outer(pstate.joins));
+ if (mapping == null || !pstate.joinedRel || _keyPath)
+ sel.groupBy(getColumns(state), sel.outer(pstate.joins));
else {
int subs = (_type == UNBOUND_VAR) ? Select.SUBS_JOINABLE
: Select.SUBS_ANY_JOINABLE;
@@ -774,11 +754,7 @@
public void orderBy(Select sel, ExpContext ctx, ExpState state,
boolean asc) {
- if (_keyPath)
- sel.orderBy(getColumns(sel, ctx, state), asc,
- sel.outer(state.joins), false, this.getSelectAs());
- else
- sel.orderBy(getColumns(state), asc, sel.outer(state.joins), false);
+ sel.orderBy(getColumns(state), asc, sel.outer(state.joins), false);
}
public Object load(ExpContext ctx, ExpState state, Result res)
@@ -818,8 +794,6 @@
// example: Map<Integer, Employee> emps
ret = res.getObject(pstate.cols[0],
JavaSQLTypes.JDBC_DEFAULT, pstate.joins);
- else if (_keyPath)
- ret = res.getObject(this, JavaSQLTypes.JDBC_DEFAULT, pstate.joins);
else
ret = pstate.field.loadProjection(ctx.store, ctx.fetch, res,
pstate.joins);
@@ -902,7 +876,7 @@
if (pstate.field == null)
sql.append("1");
else
- pstate.field.appendIndex(sql, sel, pstate.joins);;
+ pstate.field.appendIndex(sql, sel, pstate.joins);
}
public void appendType(Select sel, ExpContext ctx, ExpState state,
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
Thu Mar 19 17:33:03 2009
@@ -2012,7 +2012,7 @@
buf.append(" AND ");
// add in "t0.PK = MYTABLE.PK"
- buf.append(sel.getColumnAlias(cols[i], null)).append(" = ").
+ buf.append(sel.getColumnAlias(cols[i])).append(" = ").
append(table).append(catalogSeparator).append(cols[i]);
}
buf.append(")");
Modified:
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
(original)
+++
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
Thu Mar 19 17:33:03 2009
@@ -743,27 +743,29 @@
return getColumnAlias(col, table, getJoins(joins, false));
}
+ /**
+ * Return the alias for the give column
+ */
public String getColumnAlias(Column col, Object path) {
String columnName = col.getName();
- String tableName = col.getTable().getFullName();
- Object[] entries = _aliases.entrySet().toArray();
- Integer tableAlias = null;
- for (int i = entries.length-1; i >= 0; i--) {
- Object obj = ((Map.Entry) entries[i]).getKey();
- Key key = null;
- if (obj instanceof Key)
- key = (Key) obj;
- String str = key != null ? key.getKey().toString() :
obj.toString();
- if (str.equals(tableName)) {
- tableAlias = (Integer) ((Map.Entry) entries[i]).getValue();
- break;
- }
- }
- if (tableAlias != null)
- return new
StringBuffer("t").append(tableAlias.toString()).append(".").
- append(columnName).toString();
- else
- throw new InternalException(path.toString());
+ Table table = col.getTable();
+ String tableAlias = null;
+ Iterator itr = getJoinIterator();
+ while (itr.hasNext()) {
+ Join join = (Join) itr.next();
+ if (join != null) {
+ if (join.getTable1() == table)
+ tableAlias = join.getAlias1();
+ else if (join.getTable2() == table)
+ tableAlias = join.getAlias2();
+ if (tableAlias != null)
+ return new StringBuffer(tableAlias).append(".").
+ append(columnName).toString();
+ }
+ }
+ throw new InternalException("Can not resolve alias for field: " +
+ path.toString() + " mapped to column: " + columnName +
+ " table: "+table.getName());
}
/**
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
Thu Mar 19 17:33:03 2009
@@ -572,7 +572,12 @@
*/
private Expression addJoin(JPQLNode node, boolean inner, Expression exp) {
// the type will be the declared type for the field
- Path path = getPath(firstChild(node), false, inner);
+ JPQLNode firstChild = firstChild(node);
+ Path path = null;
+ if (firstChild.id == JJTQUALIFIEDPATH)
+ path = (Path) getQualifiedPath(firstChild);
+ else
+ path = getPath(firstChild, false, inner);
JPQLNode alias = node.getChildCount() >= 2 ? right(node) : null;
// OPENJPA-15 support subquery's from clause do not start with
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/Division.java
Thu Mar 19 17:33:03 2009
@@ -20,6 +20,7 @@
import javax.persistence.Entity;
import javax.persistence.Id;
+import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@@ -29,6 +30,17 @@
int id;
String name;
+
+ @OneToOne
+ PhoneNumber phone;
+
+ public PhoneNumber getPhone() {
+ return phone;
+ }
+
+ public void setPhone(PhoneNumber phone) {
+ this.phone = phone;
+ }
public int getId() {
return id;
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/PhoneNumber.java
Thu Mar 19 17:33:03 2009
@@ -29,6 +29,17 @@
@ManyToMany(mappedBy="phones")
Map<Division, Employee> emps = new HashMap<Division, Employee>();
+
+ @OneToOne(mappedBy="phone")
+ Division division;
+
+ public Division getDivision() {
+ return division;
+ }
+
+ public void setDivision(Division division) {
+ this.division = division;
+ }
public int getNumber() {
return number;
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex1/TestMany2ManyMapEx1.java
Thu Mar 19 17:33:03 2009
@@ -129,6 +129,38 @@
" in (e.phones) p GROUP BY KEY(p).name";
List rs5 = em.createQuery(query5).getResultList();
+ em.clear();
+ query2 = "select p.division, KEY(p), KEY(p).name from Employee e, " +
+ " in (e.phones) p ORDER BY KEY(p).name DESC";
+ rs2 = em.createQuery(query2).getResultList();
+
+ query2 = "select KEY(e) from PhoneNumber p, " +
+ " in (p.emps) e";
+ rs2 = em.createQuery(query2).getResultList();
+
+ query2 = "select KEY(e) from PhoneNumber p " +
+ " left join p.emps e";
+ rs2 = em.createQuery(query2).getResultList();
+
+ query = "select p.division, KEY(e), KEY(e).name as nm" +
+ " from PhoneNumber p, " +
+ " in (p.emps) e order by nm";
+ rs = em.createQuery(query).getResultList();
+ String n1 = ((Division) ((Object[]) rs.get(0))[1]).getName();
+ String n2 = (String) ((Object[]) rs.get(0))[2];
+ assertEquals(n1, n2);
+
+ query = "select d.name, KEY(e), KEY(e).name from PhoneNumber p, " +
+ " in (p.emps) e, Division d";
+ rs = em.createQuery(query).getResultList();
+ query = "select d.name, KEY(e), KEY(e).name from " +
+ "Division d join d.phone p, " +
+ " in (p.emps) e order by d.name";
+ rs = em.createQuery(query).getResultList();
+ n1 = ((Division) ((Object[]) rs.get(0))[1]).getName();
+ n2 = (String) ((Object[]) rs.get(0))[2];
+ assertEquals(n1, n2);
+
em.close();
}
@@ -169,6 +201,8 @@
phoneNumber.addEmployees(div, e);
e.addPhoneNumber(dept, phoneNumber);
phoneMap.put(phoneNumber.getNumber(), phoneNumber);
+ div.setPhone(phoneNumber);
+ phoneNumber.setDivision(div);
em.persist(phoneNumber);
em.persist(dept);
em.persist(div);
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java?rev=756104&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java
(added)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Address.java
Thu Mar 19 17:33:03 2009
@@ -0,0 +1,73 @@
+/*
+ * 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.jdbc.maps.m2mmapex4;
+
+import javax.persistence.*;
+
+...@embeddable
+public class Address {
+ private String street;
+ private String city;
+ private String state;
+ private String zip;
+
+ public Address(){
+ }
+
+ public Address(String street){
+ this.street=street;
+ }
+
+ public Address(String street, String city, String state, String zip){
+ this.street=street;
+ this.city=city;
+ this.state=state;
+ this.zip=zip;
+ }
+
+ public String toString(){
+ return street+" "+" "+city+","+state+" "+zip;
+ }
+
+ public String getStreet() {
+ return street;
+ }
+ public void setStreet(String street) {
+ this.street = street;
+ }
+
+ public String getCity() {
+ return city;
+ }
+ public void setCity(String city) {
+ this.city = city;
+ }
+ public String getState() {
+ return state;
+ }
+ public void setState(String state) {
+ this.state = state;
+ }
+ public String getZip() {
+ return zip;
+ }
+ public void setZip(String zip) {
+ this.zip = zip;
+ }
+}
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Division.java
Thu Mar 19 17:33:03 2009
@@ -18,8 +18,12 @@
*/
package org.apache.openjpa.persistence.jdbc.maps.m2mmapex4;
+import java.util.ArrayList;
+import java.util.Collection;
+
import javax.persistence.Entity;
import javax.persistence.Id;
+import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@@ -29,6 +33,21 @@
int id;
String name;
+
+ @OneToMany(mappedBy="division")
+ Collection<Office> offices = new ArrayList();
+
+ public Collection<Office> getOffices() {
+ return offices;
+ }
+
+ public void setOffices(Collection<Office> offices) {
+ this.offices = offices;
+ }
+
+ public void addOffice(Office office) {
+ offices.add(office);
+ }
public int getId() {
return id;
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java?rev=756104&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java
(added)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/Office.java
Thu Mar 19 17:33:03 2009
@@ -0,0 +1,94 @@
+/*
+ * 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.jdbc.maps.m2mmapex4;
+
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+...@entity
+...@table(name="MEX4Office")
+public class Office {
+ @Id
+ int id;
+
+ String name;
+ @Embedded
+ Address address;
+
+ @ManyToOne
+ Division division;
+
+ public Office() {
+ }
+
+ public Office(int id) {
+ this.id = id;
+ }
+
+ public Address getAddress() {
+ return this.address;
+ }
+
+ public void setAddress(Address address) {
+ this.address = address;
+ }
+
+ public Division getDivision() {
+ return this.division;
+ }
+
+ public void setDivision(Division division) {
+ this.division = division;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean equals(Object o) {
+ if (!(o instanceof Office)) return false;
+ Office other = (Office) o;
+ if (name.equals(other.name) &&
+ id == other.id)
+ return true;
+ return false;
+ }
+
+ public int hashCode() {
+ int ret = 0;
+ ret = ret * 31 + name.hashCode();
+ ret = ret *31 + id;
+ return ret;
+ }
+}
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java?rev=756104&r1=756103&r2=756104&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/maps/m2mmapex4/TestMany2ManyMapEx4.java
Thu Mar 19 17:33:03 2009
@@ -53,12 +53,16 @@
public int phoneId = 1;
public int divId = 1;
public int deptId = 1;
+ public int officeId = 1;
+ public int numOfficesPerDivision = 2;
public void setUp() {
super.setUp(CLEAR_TABLES,
Division.class,
Employee.class,
PhoneNumber.class,
+ Office.class,
+ Address.class,
"openjpa.jdbc.JDBCListeners",
new JDBCListener[] { this.new Listener() }
);
@@ -67,7 +71,11 @@
public void testQueryQualifiedId() throws Exception {
EntityManager em = emf.createEntityManager();
- String query = "select KEY(e) from PhoneNumber p, " +
+ String query1 = "select o.address.city from PhoneNumber p, " +
+ " in (p.emps) e, in(KEY(e).offices) o";
+ List rs1 = em.createQuery(query1).getResultList();
+
+ String query = "select KEY(e) from PhoneNumber p, " +
" in (p.emps) e order by e.empId";
List rs = em.createQuery(query).getResultList();
Division d = (Division) rs.get(0);
@@ -138,6 +146,16 @@
Division d = new Division();
d.setId(id);
d.setName("d" + id);
+ for (int i = 0; i < numOfficesPerDivision; i++) {
+ Office office = new Office(officeId++);
+ Address address = new Address("street"+i,
+ "city"+i,
+ "state"+i,
+ "zip"+i);
+ office.setAddress(address);
+ em.persist(office);
+ d.addOffice(office);
+ }
return d;
}