Author: aadamchik
Date: Mon Jul  3 14:16:59 2006
New Revision: 418853

URL: http://svn.apache.org/viewvc?rev=418853&view=rev
Log:
CAY-582 (copying the fix to the 3.0 branch)

Added:
    
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy.java
    
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy2.java
    
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy.java
    
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy2.java
    
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/property/MixedPersistenceStrategyTst.java
    
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/dml/property.MixedPersistenceStrategyTst.xml
Modified:
    
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
    
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/testmap.map.xml

Modified: 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java?rev=418853&r1=418852&r2=418853&view=diff
==============================================================================
--- 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
 (original)
+++ 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
 Mon Jul  3 14:16:59 2006
@@ -289,19 +289,19 @@
     }
 
     /*
-     * Creates an accessor for the property. First tries FieldAccessor and then
-     * DataObjectAccessor.
+     * Creates an accessor for the property.
      */
     PropertyAccessor makeAccessor(String propertyName, Class propertyType)
             throws PropertyAccessException {
+
+        if (dataObject) {
+            return new DataObjectAccessor(propertyName);
+        }
+
         try {
             return new FieldAccessor(objectClass, propertyName, propertyType);
         }
         catch (Throwable th) {
-
-            if (dataObject) {
-                return new DataObjectAccessor(propertyName);
-            }
 
             throw new PropertyAccessException("Can't create accessor for 
property '"
                     + propertyName

Added: 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy.java?rev=418853&view=auto
==============================================================================
--- 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy.java
 (added)
+++ 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy.java
 Mon Jul  3 14:16:59 2006
@@ -0,0 +1,17 @@
+package org.objectstyle.art;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.objectstyle.art.auto._MixedPersistenceStrategy;
+
+public class MixedPersistenceStrategy extends _MixedPersistenceStrategy {
+
+    // a private variable that intentionally mirrors the name of the 
persistent property
+    // to create a "conflict"
+    private List details = new ArrayList();
+    
+    public List getIvarDetails() {
+        return details;
+    }
+}

Added: 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy2.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy2.java?rev=418853&view=auto
==============================================================================
--- 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy2.java
 (added)
+++ 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/MixedPersistenceStrategy2.java
 Mon Jul  3 14:16:59 2006
@@ -0,0 +1,10 @@
+package org.objectstyle.art;
+
+import org.objectstyle.art.auto._MixedPersistenceStrategy2;
+
+public class MixedPersistenceStrategy2 extends _MixedPersistenceStrategy2 {
+
+}
+
+
+

Added: 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy.java?rev=418853&view=auto
==============================================================================
--- 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy.java
 (added)
+++ 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy.java
 Mon Jul  3 14:16:59 2006
@@ -0,0 +1,45 @@
+package org.objectstyle.art.auto;
+
+import java.util.List;
+
+/** Class _MixedPersistenceStrategy was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _MixedPersistenceStrategy extends 
org.objectstyle.cayenne.CayenneDataObject {
+
+    public static final String DESCRIPTION_PROPERTY = "description";
+    public static final String NAME_PROPERTY = "name";
+    public static final String DETAILS_PROPERTY = "details";
+
+    public static final String ID_PK_COLUMN = "ID";
+
+    public void setDescription(String description) {
+        writeProperty("description", description);
+    }
+    public String getDescription() {
+        return (String)readProperty("description");
+    }
+    
+    
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+    
+    
+    public void addToDetails(org.objectstyle.art.MixedPersistenceStrategy2 
obj) {
+        addToManyTarget("details", obj, true);
+    }
+    public void 
removeFromDetails(org.objectstyle.art.MixedPersistenceStrategy2 obj) {
+        removeToManyTarget("details", obj, true);
+    }
+    public List getDetails() {
+        return (List)readProperty("details");
+    }
+    
+    
+}

Added: 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy2.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy2.java?rev=418853&view=auto
==============================================================================
--- 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy2.java
 (added)
+++ 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/art/auto/_MixedPersistenceStrategy2.java
 Mon Jul  3 14:16:59 2006
@@ -0,0 +1,32 @@
+package org.objectstyle.art.auto;
+
+/** Class _MixedPersistenceStrategy2 was generated by Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class _MixedPersistenceStrategy2 extends 
org.objectstyle.cayenne.CayenneDataObject {
+
+    public static final String NAME_PROPERTY = "name";
+    public static final String MASTER_PROPERTY = "master";
+
+    public static final String ID_PK_COLUMN = "ID";
+
+    public void setName(String name) {
+        writeProperty("name", name);
+    }
+    public String getName() {
+        return (String)readProperty("name");
+    }
+    
+    
+    public void setMaster(org.objectstyle.art.MixedPersistenceStrategy master) 
{
+        setToOneTarget("master", master, true);
+    }
+
+    public org.objectstyle.art.MixedPersistenceStrategy getMaster() {
+        return 
(org.objectstyle.art.MixedPersistenceStrategy)readProperty("master");
+    } 
+    
+    
+}

Added: 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/property/MixedPersistenceStrategyTst.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/property/MixedPersistenceStrategyTst.java?rev=418853&view=auto
==============================================================================
--- 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/property/MixedPersistenceStrategyTst.java
 (added)
+++ 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/java/org/objectstyle/cayenne/property/MixedPersistenceStrategyTst.java
 Mon Jul  3 14:16:59 2006
@@ -0,0 +1,104 @@
+/* ====================================================================
+ * 
+ * The ObjectStyle Group Software License, version 1.1
+ * ObjectStyle Group - http://objectstyle.org/
+ * 
+ * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
+ * of the software. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 
+ * 3. The end-user documentation included with the redistribution, if any,
+ *    must include the following acknowlegement:
+ *    "This product includes software developed by independent contributors
+ *    and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
+ *    Alternately, this acknowlegement may appear in the software itself,
+ *    if and wherever such third-party acknowlegements normally appear.
+ * 
+ * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
+ *    or promote products derived from this software without prior written
+ *    permission. For written permission, email
+ *    "andrus at objectstyle dot org".
+ * 
+ * 5. Products derived from this software may not be called "ObjectStyle"
+ *    or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
+ *    names without prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ * 
+ * This software consists of voluntary contributions made by many
+ * individuals and hosted on ObjectStyle Group web site.  For more
+ * information on the ObjectStyle Group, please see
+ * <http://objectstyle.org/>.
+ */
+package org.objectstyle.cayenne.property;
+
+import org.objectstyle.art.MixedPersistenceStrategy;
+import org.objectstyle.art.MixedPersistenceStrategy2;
+import org.objectstyle.cayenne.DataObjectUtils;
+import org.objectstyle.cayenne.ValueHolder;
+import org.objectstyle.cayenne.access.DataContext;
+import org.objectstyle.cayenne.unit.CayenneTestCase;
+
+/**
+ * Tests conflicts between field and map-based persistence.
+ * 
+ * @author Andrus Adamchik
+ */
+public class MixedPersistenceStrategyTst extends CayenneTestCase {
+
+    public void testConflictingField1() throws Exception {
+        deleteTestData();
+        createTestData("testConflictingField");
+
+        DataContext c = createDataContext();
+        MixedPersistenceStrategy object = (MixedPersistenceStrategy) 
DataObjectUtils
+                .objectForPK(c, MixedPersistenceStrategy.class, 1);
+
+        assertEquals(2, object.getDetails().size());
+        assertTrue(object.getDetails() instanceof ValueHolder);
+    }
+
+    /**
+     * This test case reproduces CAY-582 bug.
+     */
+    public void testConflictingField2() throws Exception {
+        deleteTestData();
+        createTestData("testConflictingField");
+
+        DataContext c = createDataContext();
+        MixedPersistenceStrategy2 detail1 = (MixedPersistenceStrategy2) 
DataObjectUtils
+                .objectForPK(c, MixedPersistenceStrategy2.class, 1);
+
+        MixedPersistenceStrategy2 detail2 = (MixedPersistenceStrategy2) 
DataObjectUtils
+                .objectForPK(c, MixedPersistenceStrategy2.class, 2);
+
+        // resolve master (this is where CAY-582 exception happens)
+        assertEquals("n1", detail1.getMaster().getName());
+
+        assertEquals(2, detail2.getMaster().getDetails().size());
+        assertTrue(detail2.getMaster().getDetails() instanceof ValueHolder);
+    }
+}

Added: 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/dml/property.MixedPersistenceStrategyTst.xml
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/dml/property.MixedPersistenceStrategyTst.xml?rev=418853&view=auto
==============================================================================
--- 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/dml/property.MixedPersistenceStrategyTst.xml
 (added)
+++ 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/dml/property.MixedPersistenceStrategyTst.xml
 Mon Jul  3 14:16:59 2006
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
"http://www.springframework.org/dtd/spring-beans.dtd";>
+
+<beans default-lazy-init="true">       
+       <!-- ======================================= -->
+       <!-- Named Queries -->
+       <!-- ======================================= -->
+       
+       <bean id="M11" 
class="org.objectstyle.cayenne.unit.util.UpdatingSQLTemplate">
+               <constructor-arg 
type="java.lang.Class"><value>org.objectstyle.art.MixedPersistenceStrategy</value></constructor-arg>
+               <constructor-arg><value>
+               insert into MIXED_PERSISTENCE_STRATEGY (ID, DESCRIPTION, NAME) 
values (1, 'd1', 'n1')
+               </value></constructor-arg>
+       </bean>
+       
+       <bean id="M21" 
class="org.objectstyle.cayenne.unit.util.UpdatingSQLTemplate">
+               <constructor-arg 
type="java.lang.Class"><value>org.objectstyle.art.MixedPersistenceStrategy2</value></constructor-arg>
+               <constructor-arg><value>
+               insert into MIXED_PERSISTENCE_STRATEGY2 (ID, MASTER_ID, NAME) 
values (1, 1, 'dn1')
+               </value></constructor-arg>
+       </bean>
+       
+       <bean id="M22" 
class="org.objectstyle.cayenne.unit.util.UpdatingSQLTemplate">
+               <constructor-arg 
type="java.lang.Class"><value>org.objectstyle.art.MixedPersistenceStrategy2</value></constructor-arg>
+               <constructor-arg><value>
+               insert into MIXED_PERSISTENCE_STRATEGY2 (ID, MASTER_ID, NAME) 
values (2, 1, 'dn2')
+               </value></constructor-arg>
+       </bean>
+       
+       <!-- ======================================= -->
+       <!-- Data Sets -->
+       <!-- ======================================= -->        
+       <bean id="testConflictingField" class="java.util.ArrayList">
+               <constructor-arg>
+                       <list>
+                               <ref bean="M11"/>
+                               <ref bean="M21"/>
+                               <ref bean="M22"/>
+                       </list>
+               </constructor-arg>
+       </bean>
+</beans>
\ No newline at end of file

Modified: 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/testmap.map.xml
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/testmap.map.xml?rev=418853&r1=418852&r2=418853&view=diff
==============================================================================
--- 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/testmap.map.xml
 (original)
+++ 
incubator/cayenne/main/branches/PROTO-3.0/cayenne/cayenne-java/src/tests/resources/testmap.map.xml
 Mon Jul  3 14:16:59 2006
@@ -130,6 +130,16 @@
                <db-attribute name="DESCR" type="VARCHAR" length="50"/>
                <db-attribute name="PK_ATTRIBUTE" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
        </db-entity>
+       <db-entity name="MIXED_PERSISTENCE_STRATEGY">
+               <db-attribute name="DESCRIPTION" type="VARCHAR" length="200"/>
+               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
+               <db-attribute name="NAME" type="VARCHAR" length="200"/>
+       </db-entity>
+       <db-entity name="MIXED_PERSISTENCE_STRATEGY2">
+               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
+               <db-attribute name="MASTER_ID" type="INTEGER"/>
+               <db-attribute name="NAME" type="VARCHAR" length="200"/>
+       </db-entity>
        <db-entity name="NO_PK_TEST">
                <db-attribute name="ATTRIBUTE1" type="INTEGER"/>
        </db-entity>
@@ -277,6 +287,13 @@
                <obj-attribute name="descr" type="java.lang.String" 
db-attribute-path="DESCR"/>
                <obj-attribute name="pkAttribute" type="java.lang.Integer" 
db-attribute-path="PK_ATTRIBUTE"/>
        </obj-entity>
+       <obj-entity name="MixedPersistenceStrategy" 
className="org.objectstyle.art.MixedPersistenceStrategy" 
dbEntityName="MIXED_PERSISTENCE_STRATEGY">
+               <obj-attribute name="description" type="java.lang.String" 
db-attribute-path="DESCRIPTION"/>
+               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
+       </obj-entity>
+       <obj-entity name="MixedPersistenceStrategy2" 
className="org.objectstyle.art.MixedPersistenceStrategy2" 
dbEntityName="MIXED_PERSISTENCE_STRATEGY2">
+               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
+       </obj-entity>
        <obj-entity name="NoPkTest" className="org.objectstyle.art.NoPkTest" 
dbEntityName="NO_PK_TEST">
                <obj-attribute name="attribute1" type="java.lang.Integer" 
db-attribute-path="ATTRIBUTE1"/>
        </obj-entity>
@@ -398,6 +415,12 @@
        <db-relationship name="meaningfulPKDepArray" 
source="MEANINGFUL_PK_TEST1" target="MEANINGFUL_PK_DEP" toMany="true">
                <db-attribute-pair source="PK_ATTRIBUTE" target="MASTER_PK"/>
        </db-relationship>
+       <db-relationship name="details" source="MIXED_PERSISTENCE_STRATEGY" 
target="MIXED_PERSISTENCE_STRATEGY2" toMany="true">
+               <db-attribute-pair source="ID" target="MASTER_ID"/>
+       </db-relationship>
+       <db-relationship name="master" source="MIXED_PERSISTENCE_STRATEGY2" 
target="MIXED_PERSISTENCE_STRATEGY" toMany="false">
+               <db-attribute-pair source="MASTER_ID" target="ID"/>
+       </db-relationship>
        <db-relationship name="toArtist" source="PAINTING" target="ARTIST" 
toMany="false">
                <db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
        </db-relationship>
@@ -441,6 +464,8 @@
        <obj-relationship name="toDep" source="GeneratedColumnTest" 
target="GeneratedColumnDep" db-relationship-path="toDep"/>
        <obj-relationship name="toMeaningfulPK" source="MeaningfulPKDep" 
target="MeaningfulPKTest1" db-relationship-path="toMeaningfulPK"/>
        <obj-relationship name="meaningfulPKDepArray" 
source="MeaningfulPKTest1" target="MeaningfulPKDep" 
db-relationship-path="meaningfulPKDepArray"/>
+       <obj-relationship name="details" source="MixedPersistenceStrategy" 
target="MixedPersistenceStrategy2" db-relationship-path="details"/>
+       <obj-relationship name="master" source="MixedPersistenceStrategy2" 
target="MixedPersistenceStrategy" db-relationship-path="master"/>
        <obj-relationship name="toArtist" source="Painting" target="Artist" 
deleteRule="Nullify" db-relationship-path="toArtist"/>
        <obj-relationship name="toGallery" source="Painting" target="Gallery" 
deleteRule="Nullify" db-relationship-path="toGallery"/>
        <obj-relationship name="toPaintingInfo" source="Painting" 
target="PaintingInfo" deleteRule="Cascade" 
db-relationship-path="toPaintingInfo"/>


Reply via email to