The DAS is not correctly handling the case where a new object is inserted that has a 1-1 relationship to another object. The attached patch addresses this issue.
Brent
Index:
src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java
===================================================================
---
src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java
(revision 392391)
+++
src/test/java/org/apache/tuscany/das/rdb/test/OneToOneRelationshipTests.java
(working copy)
@@ -135,7 +135,7 @@
DataObject employee = root.createDataObject("EMPLOYEE");
employee.setString ("NAME", "Joe Hotshot");
- /* //Assigne a EOTM
+ //Assigne a EOTM
//Strangely this statement results in "Could not find relationships"
error
//although "company.setDataObject("company->employee_opposite",
null);" dos not
company.setDataObject("company->employee_opposite", employee);
@@ -150,6 +150,6 @@
employee = root.getDataObject("COMPANY[1]/company->employee_opposite");
assertEquals("Joe Hotshot", employee.getString("NAME"));
- */
+
}
}
Index:
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
===================================================================
---
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
(revision 392391)
+++
src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
(working copy)
@@ -18,6 +18,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -123,17 +124,17 @@
if (obj.isSet(p))
fields.add(p);
} else {
- if (!p.isMany() && obj.isSet(p)) {
- Relationship relationship =
config.getRelationshipByName(p
-
.getOpposite().getName());
-
- RelationshipWrapper r = new
RelationshipWrapper(
+ if ( obj.isSet(p) ) {
+ Relationship relationship =
config.getRelationshipByReference(p);
+ if ( p.getOpposite().isMany() ||
(hasState(config, relationship, obj))) {
+ RelationshipWrapper r = new
RelationshipWrapper(
relationship);
- Iterator keys =
r.getForeignKeys().iterator();
- while (keys.hasNext()) {
- String key = (String)
keys.next();
- Property keyProp =
obj.getType().getProperty(key);
- fields.add(keyProp);
+ Iterator keys =
r.getForeignKeys().iterator();
+ while (keys.hasNext()) {
+ String key = (String)
keys.next();
+ Property keyProp =
obj.getType().getProperty(key);
+ fields.add(keyProp);
+ }
}
}
@@ -161,4 +162,18 @@
return parameters;
}
+ private boolean hasState(MappingWrapper config, Relationship rel,
DataObject changedObject) {
+
+ if ( !rel.isMany()) {
+ Table t =
config.getTableByPropertyName(changedObject.getType().getName());
+ TableWrapper tw = new TableWrapper(t);
+ RelationshipWrapper rw = new
RelationshipWrapper(rel);
+ if ((
rel.getForeignKeyTable().equals(t.getName())) &&
+ (
Collections.disjoint(tw.getPrimaryKeyProperties(),rw.getForeignKeys()) ))
+ return true;
+ }
+
+ return false;
+ }
+
}