OPENJPA-2247 Complete fix for 1x1 bi and mx1 uni relationships of the described problem.

git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@1392661 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Albert Lee 2012-10-01 22:15:42 +00:00
parent 1c2ec168ed
commit a06d373573
4 changed files with 69 additions and 6 deletions

View File

@ -88,7 +88,6 @@ import org.apache.openjpa.jdbc.sql.JoinSyntaxes;
import org.apache.openjpa.lib.conf.Configurable;
import org.apache.openjpa.lib.conf.Configurations;
import org.apache.openjpa.lib.util.J2DoPrivHelper;
import org.apache.openjpa.lib.util.JavaVersions;
import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
@ -1084,7 +1083,10 @@ public class MappingRepository extends MetaDataRepository {
field.getAssociationType() == FieldMetaData.MANY_TO_ONE &&
hasJoinTable(field) &&
!isBidirectional(field)) {
field.getValueMapping().getValueInfo().setColumns(field.getElementMapping().getValueInfo().getColumns());
List<Column> cols = field.getElementMapping().getValueInfo().getColumns();
if (cols != null && cols.size() > 0) {
field.getValueMapping().getValueInfo().setColumns(cols);
}
return true;
}
return false;
@ -1096,8 +1098,9 @@ public class MappingRepository extends MetaDataRepository {
hasJoinTable(field) &&
!isBidirectional(field)) {
List<Column> cols = field.getElementMapping().getValueInfo().getColumns();
if (cols != null && cols.size() > 0)
if (cols != null && cols.size() > 0) {
field.getValueMapping().getValueInfo().setColumns(cols);
}
return true;
}
return false;
@ -1108,7 +1111,10 @@ public class MappingRepository extends MetaDataRepository {
field.getAssociationType() == FieldMetaData.ONE_TO_ONE &&
hasJoinTable(field) &&
isBidirectional(field)) {
field.getValueMapping().getValueInfo().setColumns(field.getElementMapping().getValueInfo().getColumns());
List<Column> cols = field.getElementMapping().getValueInfo().getColumns();
if (cols != null && cols.size() > 0) {
field.getValueMapping().getValueInfo().setColumns(cols);
}
return true;
}
return false;

View File

@ -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.meta;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Version;
@Entity
public class PChildBi {
@Id
@GeneratedValue
int idChild;
@Version
int version;
@Basic
String basic;
@OneToOne
Parent parent;
}

View File

@ -22,6 +22,7 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SecondaryTable;
@ -41,4 +42,11 @@ public class Parent {
@JoinColumn(name = "CHILD_REF", table = "ParentSecondaryTable", referencedColumnName = "idChild")
PChild child;
@OneToOne
@JoinColumn(name = "CHILDBI_REF", table = "ParentSecondaryTable", referencedColumnName = "idChild")
PChildBi childbi;
@ManyToOne
@JoinColumn(name = "CHILDREN_REF", table = "ParentSecondaryTable", referencedColumnName = "idChild")
PChild children;
}

View File

@ -23,7 +23,7 @@ import org.apache.openjpa.persistence.test.SingleEMFTestCase;
public class TestSecondaryTable extends SingleEMFTestCase {
public void setUp() {
setUp(Parent.class, PChild.class
setUp(Parent.class, PChild.class, PChildBi.class
// Hard code to 2.0 p.xml value. If the p.xml is 1.0, this value will be changed to false, and the test
// won't fail.
, "openjpa.Compatibility", "NonDefaultMappingAllowed=true");
@ -36,6 +36,13 @@ public class TestSecondaryTable extends SingleEMFTestCase {
FieldMapping fm = getMapping(Parent.class).getFieldMapping("child");
assertNotNull(fm);
assertEquals("CHILD_REF", fm.getColumns()[0].getIdentifier().getName());
}
fm = getMapping(Parent.class).getFieldMapping("childbi");
assertNotNull(fm);
assertEquals("CHILDBI_REF", fm.getColumns()[0].getIdentifier().getName());
fm = getMapping(Parent.class).getFieldMapping("children");
assertNotNull(fm);
assertEquals("CHILDREN_REF", fm.getColumns()[0].getIdentifier().getName());
}
}