diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMapping.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMapping.java index 07c4c3ed5..067be5761 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMapping.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/FieldMapping.java @@ -515,6 +515,13 @@ public class FieldMapping */ public void mapJoin(boolean adapt, boolean joinRequired) { Table table = _info.getTable(this, joinRequired, adapt); + + if(table != null && table.equals(getDefiningMapping().getTable())) { + // Don't create a join if the field's table is the same as the + // class's table. + table = null; + } + ForeignKey join = null; if (table != null) join = _info.getJoin(this, table, adapt); diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/Item.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/Item.java new file mode 100644 index 000000000..04c8d1f20 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/Item.java @@ -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.simple; + +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "ITEM") +public class Item { + + public int itemId; + public String itemName; + public java.math.BigDecimal itemPrice; + public String itemData; + + @Column(name = "I_DATA", table = "ITEM") + public String getItemData() { + return itemData; + } + + public void setItemData(String itemData) { + this.itemData = itemData; + } + + @Id + @Column(name = "I_ID", table = "ITEM") + @GeneratedValue(strategy = GenerationType.AUTO) + public int getItemId() { + return itemId; + } + + public void setItemId(int itemId) { + this.itemId = itemId; + } + + @Column(name = "I_NAME", table = "ITEM") + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + @Basic + @Column(name = "I_PRICE", table = "ITEM") + public java.math.BigDecimal getItemPrice() { + return itemPrice; + } + + public void setItemPrice(java.math.BigDecimal itemPrice) { + this.itemPrice = itemPrice; + } + +} \ No newline at end of file diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestJoin.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestJoin.java new file mode 100644 index 000000000..afbdf9a36 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestJoin.java @@ -0,0 +1,42 @@ +/* + * 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.simple; + +import org.apache.openjpa.jdbc.meta.ClassMapping; +import org.apache.openjpa.jdbc.meta.FieldMapping; +import org.apache.openjpa.persistence.JPAFacadeHelper; +import org.apache.openjpa.persistence.test.SingleEMFTestCase; + +public class TestJoin extends SingleEMFTestCase { + + public void setUp() { + super.setUp(Item.class); + } + + /* + * Verify that an entity does not create joins to itself. + */ + public void testSelfJoin() { + ClassMapping cm = (ClassMapping) JPAFacadeHelper.getMetaData(emf, + Item.class); + FieldMapping fm = cm.getFieldMapping("itemId"); + assertNotNull(fm); + assertNull(fm.getJoinForeignKey()); + } +}