You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by dw...@apache.org on 2009/09/14 16:29:34 UTC

svn commit: r814662 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/

Author: dwoods
Date: Mon Sep 14 14:29:34 2009
New Revision: 814662

URL: http://svn.apache.org/viewvc?rev=814662&view=rev
Log:
OPENJPA-1201 [Mapped by] field not set when contained in superclass.  Patch and testcases contributed by David Minor.

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyAbstract.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyConcrete.java   (with props)
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestJoinedInheritanceHierarchy.java   (with props)
Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java?rev=814662&r1=814661&r2=814662&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreManager.java Mon Sep 14 14:29:34 2009
@@ -453,7 +453,7 @@
     protected void setMappedBy(OpenJPAStateManager sm,
         FieldMapping mappedByFieldMapping, Object mappedByObject) {
         ClassMapping mapping = (ClassMapping) sm.getMetaData();
-        FieldMapping[] fms = mapping.getDeclaredFieldMappings();
+        FieldMapping[] fms = mapping.getFieldMappings();
         for (int i = 0; i < fms.length; i++) {
             if (fms[i] == mappedByFieldMapping) {
                 sm.storeObject(fms[i].getIndex(), mappedByObject);

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyAbstract.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyAbstract.java?rev=814662&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyAbstract.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyAbstract.java Mon Sep 14 14:29:34 2009
@@ -0,0 +1,76 @@
+/*
+ * 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.relations;
+
+import java.io.Serializable;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.DiscriminatorColumn;
+import javax.persistence.DiscriminatorType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+
+
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+@DiscriminatorColumn(discriminatorType=DiscriminatorType.STRING)
+public abstract class InheritanceHierarchyAbstract implements Serializable {
+
+    @Id
+    @GeneratedValue
+    private long id;
+   
+    @ManyToOne
+    @JoinColumn
+    private InheritanceHierarchyAbstract parent;
+
+	@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, 
+			fetch=FetchType.EAGER)
+    private Set<InheritanceHierarchyAbstract> children;
+
+
+    public long getId() { 
+        return id; 
+    }
+
+	public Set<InheritanceHierarchyAbstract> getChildren() {
+		return this.children;
+	}
+
+	public void setChildren(Set<InheritanceHierarchyAbstract> children) {
+		this.children = children;
+	}
+
+	public InheritanceHierarchyAbstract getParent() {
+		return this.parent;
+	}
+
+	public void setParent(InheritanceHierarchyAbstract parent) {
+		this.parent = parent;
+	}
+
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyAbstract.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyConcrete.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyConcrete.java?rev=814662&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyConcrete.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyConcrete.java Mon Sep 14 14:29:34 2009
@@ -0,0 +1,54 @@
+/*
+ * 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.relations;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.Set;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+
+
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+@DiscriminatorValue("concrete")
+public class InheritanceHierarchyConcrete extends InheritanceHierarchyAbstract implements Serializable {
+
+	@Basic
+	private int value;
+
+	public int getValue() {
+		return this.value;
+	}
+
+	public void setValue(int value) {
+		this.value = value;
+	}
+
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/InheritanceHierarchyConcrete.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestJoinedInheritanceHierarchy.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestJoinedInheritanceHierarchy.java?rev=814662&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestJoinedInheritanceHierarchy.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestJoinedInheritanceHierarchy.java Mon Sep 14 14:29:34 2009
@@ -0,0 +1,66 @@
+/*
+ * 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.relations;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.openjpa.persistence.OpenJPAEntityManager;
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+public class TestJoinedInheritanceHierarchy
+    extends SingleEMFTestCase {
+
+    public void setUp() {
+    	super.setUp(CLEAR_TABLES, InheritanceHierarchyConcrete.class, 
+    			InheritanceHierarchyAbstract.class);
+    }
+
+    public void testInverseRelationNotNull() {
+    	
+    	InheritanceHierarchyConcrete parent = new InheritanceHierarchyConcrete();
+    	InheritanceHierarchyConcrete child = new InheritanceHierarchyConcrete();
+    	
+    	parent.setValue(42);
+    	child.setValue(21);
+    	
+    	Set<InheritanceHierarchyAbstract> children = new HashSet<InheritanceHierarchyAbstract>();
+    	children.add(child);
+    	parent.setChildren(children);
+    	child.setParent(parent);
+    	
+    	OpenJPAEntityManager em = emf.createEntityManager();
+    	em.getTransaction().begin();
+    	em.persist(parent);
+    	em.getTransaction().commit();
+    	em.close();
+    	
+    	em = emf.createEntityManager();
+    	parent = (InheritanceHierarchyConcrete)em.createQuery(
+    			"SELECT p FROM InheritanceHierarchyConcrete p WHERE p.id=" + parent.getId()
+    			).getResultList().get(0);
+    	em.close();
+    	
+    	for(InheritanceHierarchyAbstract childNode : parent.getChildren()) {
+    		assertNotNull("Parent should not be null", childNode.getParent());
+    	}
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/relations/TestJoinedInheritanceHierarchy.java
------------------------------------------------------------------------------
    svn:eol-style = native