Author: fancy
Date: Tue Oct 6 16:13:33 2009
New Revision: 822330
URL: http://svn.apache.org/viewvc?rev=822330&view=rev
Log:
OPENJPA-1338 Allow comparison for VALUE(e) that maps to basic type
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Coll_Map.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Coll_Map.java
Modified:
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/embed/TestEmbeddable.java
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=822330&r1=822329&r2=822330&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
Tue Oct 6 16:13:33 2009
@@ -1731,20 +1731,20 @@
private Value getGeneralIdentifier(JPQLNode node, boolean inWhereClause) {
JPQLNode id = onlyChild(node);
- if (inWhereClause && node.id == JJTVALUE)
- throw parseException(EX_USER, "bad-general-identifier",
- new Object[]{ id.text, "VALUE" }, null);
-
Path path = validateMapPath(node, id);
+
+ if (node.id == JJTKEY)
+ path = (Path) factory.getKey(path);
FieldMetaData fld = path.last();
- path = (Path) factory.getKey(path);
- ClassMetaData meta = fld.getKey().getTypeMetaData();
- if (inWhereClause && meta != null &&
- fld.isElementCollection() &&
- fld.getElement().getEmbeddedMetaData() != null)
- // check basic type
- throw parseException(EX_USER, "bad-general-identifier",
- new Object[]{ id.text, "KEY" }, null);
+ ClassMetaData meta = node.id == JJTKEY ? meta =
fld.getKey().getTypeMetaData()
+ : fld.getDeclaredTypeMetaData();
+ if (inWhereClause &&
+ (meta != null && meta.isEmbeddable()) ||
+ (fld.isElementCollection() &&
+ fld.getElement().getEmbeddedMetaData() != null))
+ // check basic type
+ throw parseException(EX_USER, "bad-general-identifier",
+ new Object[]{ id.text, node.id == JJTVALUE ? "VALUE" :
"KEY" }, null);
return path;
}
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Coll_Map.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Coll_Map.java?rev=822330&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Coll_Map.java
(added)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Embed_Coll_Map.java
Tue Oct 6 16:13:33 2009
@@ -0,0 +1,67 @@
+/*
+ * 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.embed;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.ElementCollection;
+import javax.persistence.Embeddable;
+
+...@embeddable
+public class Embed_Coll_Map {
+ protected String name1;
+ protected String name2;
+ protected String name3;
+
+ @ElementCollection
+ public Map<Integer, Integer> mapKeyInteger = new HashMap<Integer,
Integer>();
+
+ public String getName1() {
+ return name1;
+ }
+
+ public void setName1(String name1) {
+ this.name1 = name1;
+ }
+
+ public String getName2() {
+ return name2;
+ }
+
+ public void setName2(String name2) {
+ this.name2 = name2;
+ }
+
+ public String getName3() {
+ return name3;
+ }
+
+ public void setName3(String name3) {
+ this.name3 = name3;
+ }
+
+ public Map<Integer,Integer> getMap() {
+ return mapKeyInteger;
+ }
+
+ public void addMap(Integer key, Integer value) {
+ mapKeyInteger.put(key, value);
+ }
+}
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Coll_Map.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Coll_Map.java?rev=822330&view=auto
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Coll_Map.java
(added)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Coll_Map.java
Tue Oct 6 16:13:33 2009
@@ -0,0 +1,77 @@
+/*
+ * 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.embed;
+
+import java.io.Serializable;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+...@entity
+...@table(name="EETMM")
+public class EntityA_Embed_Coll_Map implements Serializable {
+ @Id
+ Integer id;
+
+ @Column(length = 30)
+ String name;
+
+ @Basic(fetch = FetchType.LAZY)
+ int age;
+
+ @Embedded
+ protected Embed_Coll_Map embed;
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Embed_Coll_Map getEmbed() {
+ return embed;
+ }
+
+ public void setEmbed(Embed_Coll_Map embed) {
+ this.embed = embed;
+ }
+}
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java?rev=822330&r1=822329&r2=822330&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java
Tue Oct 6 16:13:33 2009
@@ -97,6 +97,7 @@
Embed_MappedToOne.class, Embed_MappedToOneCascadeDelete.class,
EntityA_Embed_MappedToOneCascadeDelete.class, EntityB2.class,
Book.class, Listing.class, Seller.class,
+ EntityA_Embed_Coll_Map.class, Embed_Coll_Map.class,
EntityA_Embed_Complex.class, CLEAR_TABLES);
sql.clear();
DBDictionary dict =
((JDBCConfiguration)emf.getConfiguration()).getDBDictionaryInstance();
@@ -104,7 +105,24 @@
((OracleDictionary)dict).useTriggersForAutoAssign = true;
}
}
-
+
+ public void testEntityA_Embed_Coll_Map() {
+ queryEntityA_Embed_Coll_Map();
+ }
+
+ public void queryEntityA_Embed_Coll_Map() {
+ EntityManager em = emf.createEntityManager();
+ String query[] = {
+ "select e from EntityA_Embed_Coll_Map a join a.embed e " +
+ "join e.mapKeyInteger i where value(i) > 0 ",
+ };
+ List rs = null;
+ for (int i = 0; i < query.length; i++) {
+ rs = em.createQuery(query[i]).getResultList();
+ em.clear();
+ }
+ }
+
public void testEntityA_Coll_String() {
createEntityA_Coll_String();
queryEntityA_Coll_String();