You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/04/28 18:00:26 UTC

svn commit: r397938 - in /incubator/cayenne/trunk/cayenne-jpa/src: main/java/org/apache/cayenne/jpa/bridge/ main/java/org/apache/cayenne/jpa/map/ test/java/org/apache/cayenne/jpa/bridge/ test/java/org/apache/cayenne/jpa/entity/cayenne/

Author: aadamchik
Date: Fri Apr 28 09:00:24 2006
New Revision: 397938

URL: http://svn.apache.org/viewcvs?rev=397938&view=rev
Log:
more DataMap converter stuff

Added:
    incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/
    incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity1.java
    incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity2.java
    incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntityMap1.java
Modified:
    incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
    incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java
    incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java
    incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java
    incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java

Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java?rev=397938&r1=397937&r2=397938&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java Fri Apr 28 09:00:24 2006
@@ -55,16 +55,25 @@
  */
 package org.apache.cayenne.jpa.bridge;
 
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
+
+import org.apache.cayenne.jpa.JpaProviderException;
+import org.apache.cayenne.jpa.map.AccessType;
 import org.apache.cayenne.jpa.map.JpaAttribute;
 import org.apache.cayenne.jpa.map.JpaEntity;
 import org.apache.cayenne.jpa.map.JpaEntityMap;
 import org.apache.cayenne.jpa.map.JpaNamedQuery;
 import org.apache.cayenne.jpa.map.JpaQueryHint;
+import org.apache.cayenne.jpa.map.JpaTable;
 import org.apache.cayenne.util.BaseTreeVisitor;
 import org.apache.cayenne.util.HierarchicalTreeVisitor;
 import org.apache.cayenne.util.TraversalUtil;
 import org.objectstyle.cayenne.map.DataMap;
+import org.objectstyle.cayenne.map.DbEntity;
+import org.objectstyle.cayenne.map.ObjAttribute;
 import org.objectstyle.cayenne.map.ObjEntity;
+import org.objectstyle.cayenne.map.ObjRelationship;
 import org.objectstyle.cayenne.project.ProjectPath;
 import org.objectstyle.cayenne.util.Util;
 import org.objectstyle.cayenne.validation.SimpleValidationFailure;
@@ -112,41 +121,109 @@
         conflicts.addFailure(new SimpleValidationFailure(path.getObject(), message));
     }
 
+    /**
+     * Creates a stateless instance of the JpaEntityMap traversal visitor. This method is
+     * lazily invoked and cached by this object.
+     */
     protected HierarchicalTreeVisitor createVisitor() {
         BaseTreeVisitor visitor = new BaseTreeVisitor();
-        visitor.addChildVisitor(JpaEntity.class, new EntityVisitor());
-        visitor.addChildVisitor(JpaNamedQuery.class, new NamedQueryVisitor());
-
+        visitor.addChildVisitor(JpaEntity.class, new JpaEntityVisitor());
+        visitor.addChildVisitor(JpaNamedQuery.class, new JpaNamedQueryVisitor());
         return visitor;
     }
 
-    class EntityVisitor extends NestedVisitor {
+    class JpaAttributeVisitor extends NestedVisitor {
+
+        Class getAttributeType(ProjectPath path, String name) {
+            AccessType access = ((JpaEntityMap) path.getRoot()).getAccess();
+
+            Class objectClass = ((ObjEntity) targetPath.firstInstanceOf(ObjEntity.class))
+                    .getJavaClass();
+
+            try {
+                if (access == AccessType.FIELD) {
+                    return lookupFieldInHierarchy(objectClass, name).getType();
+                }
+                else {
+                    return new PropertyDescriptor(name, objectClass).getPropertyType();
+                }
+            }
+            catch (Exception e) {
+                throw new JpaProviderException("Error resolving attribute '"
+                        + name
+                        + "', access type:"
+                        + access, e);
+            }
+        }
+
+        Field lookupFieldInHierarchy(Class beanClass, String fieldName)
+                throws SecurityException, NoSuchFieldException {
+
+            try {
+                return beanClass.getDeclaredField(fieldName);
+            }
+            catch (NoSuchFieldException e) {
+
+                Class superClass = beanClass.getSuperclass();
+                if (superClass == null
+                        || superClass.getName().equals(Object.class.getName())) {
+                    throw e;
+                }
 
-        public EntityVisitor() {
-            addChildVisitor(JpaAttribute.class, new AttributeVisitor());
+                return lookupFieldInHierarchy(superClass, fieldName);
+            }
         }
 
         @Override
         Object createObject(ProjectPath path) {
-            JpaEntity jpaEntity = (JpaEntity) path.getObject();
-            ObjEntity cayenneEntity = new ObjEntity(jpaEntity.getName());
-            cayenneEntity.setClassName(jpaEntity.getClassName());
 
-            ((DataMap) targetPath.getObject()).addObjEntity(cayenneEntity);
+            JpaAttribute jpaAttribute = (JpaAttribute) path.getObject();
 
-            return cayenneEntity;
+            ObjEntity parentCayenneEntity = (ObjEntity) targetPath.getObject();
+
+            if (jpaAttribute.isTransient()) {
+
+            }
+            else if (jpaAttribute.isRelationship()) {
+                ObjRelationship cayenneRelationship = new ObjRelationship(jpaAttribute
+                        .getName());
+                
+                parentCayenneEntity.addRelationship(cayenneRelationship);
+                return cayenneRelationship;
+            }
+            else {
+                ObjAttribute cayenneAttribute = new ObjAttribute(jpaAttribute.getName());
+                cayenneAttribute.setType(getAttributeType(path, jpaAttribute.getName())
+                        .getName());
+
+                parentCayenneEntity.addAttribute(cayenneAttribute);
+                return cayenneAttribute;
+            }
+
+            return null;
         }
     }
 
-    class AttributeVisitor extends NestedVisitor {
+    class JpaEntityVisitor extends NestedVisitor {
+
+        public JpaEntityVisitor() {
+            addChildVisitor(JpaAttribute.class, new JpaAttributeVisitor());
+            addChildVisitor(JpaTable.class, new JpaTableVisitor());
+        }
 
         @Override
         Object createObject(ProjectPath path) {
-            return null;
+            JpaEntity jpaEntity = (JpaEntity) path.getObject();
+            ObjEntity cayenneEntity = new ObjEntity(jpaEntity.getName());
+            cayenneEntity.setClassName(jpaEntity.getClassName());
+
+            ((DataMap) targetPath.getObject()).addObjEntity(cayenneEntity);
+
+            return cayenneEntity;
         }
     }
 
-    class NamedQueryVisitor extends NestedVisitor {
+    class JpaNamedQueryVisitor extends NestedVisitor {
 
         @Override
         Object createObject(ProjectPath path) {
@@ -190,6 +267,27 @@
             ((DataMap) targetPath.firstInstanceOf(DataMap.class)).addQuery(cayenneQuery);
 
             return cayenneQuery;
+        }
+    }
+
+    class JpaTableVisitor extends NestedVisitor {
+
+        public JpaTableVisitor() {
+
+        }
+
+        @Override
+        Object createObject(ProjectPath path) {
+            JpaTable jpaTable = (JpaTable) path.getObject();
+            DbEntity cayenneEntity = new DbEntity(jpaTable.getName());
+            cayenneEntity.setCatalog(jpaTable.getCatalog());
+            cayenneEntity.setSchema(jpaTable.getSchema());
+
+            ObjEntity parentCayenneEntity = (ObjEntity) targetPath.getObject();
+            parentCayenneEntity.getDataMap().addDbEntity(cayenneEntity);
+            parentCayenneEntity.setDbEntity(cayenneEntity);
+
+            return cayenneEntity;
         }
     }
 

Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java?rev=397938&r1=397937&r2=397938&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java Fri Apr 28 09:00:24 2006
@@ -103,6 +103,17 @@
     protected String mapKey;
     protected String orderBy;
 
+    /**
+     * Returns true if attribute is one of {@link JpaManyToMany}, {@link JpaManyToOne},
+     * {@link JpaOneToMany}, {@link JpaOneToOne}.
+     */
+    public boolean isRelationship() {
+        return semantics == AttributeSemantics.MANY_TO_ONE
+                || semantics == AttributeSemantics.ONE_TO_MANY
+                || semantics == AttributeSemantics.ONE_TO_ONE
+                || semantics == AttributeSemantics.MANY_TO_MANY;
+    }
+
     public String getName() {
         return name;
     }
@@ -210,7 +221,7 @@
         this.column = column;
     }
 
-    @TreeNodeChild(type=JpaJoinColumn.class)
+    @TreeNodeChild(type = JpaJoinColumn.class)
     public Collection<JpaJoinColumn> getJoinColumns() {
         if (joinColumns == null) {
             joinColumns = new ArrayList<JpaJoinColumn>() {

Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java?rev=397938&r1=397937&r2=397938&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java Fri Apr 28 09:00:24 2006
@@ -35,6 +35,10 @@
     protected JpaEntityListeners defaultEntityListeners;
     protected Collection<CascadeType> cascades;
 
+    public JpaEntityMap() {
+        this.access = AccessType.FIELD;
+    }
+
     /**
      * Merges all entities from another map, overriding existing values.
      * 

Modified: incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java?rev=397938&r1=397937&r2=397938&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java Fri Apr 28 09:00:24 2006
@@ -58,18 +58,9 @@
 import junit.framework.TestCase;
 
 import org.apache.cayenne.jpa.conf.EntityMapAnnotationLoader;
-import org.apache.cayenne.jpa.entity.MockEmbed1;
-import org.apache.cayenne.jpa.entity.MockEmbed2;
-import org.apache.cayenne.jpa.entity.MockEntity1;
-import org.apache.cayenne.jpa.entity.MockEntity2;
-import org.apache.cayenne.jpa.entity.MockEntity3;
-import org.apache.cayenne.jpa.entity.MockEntity4;
-import org.apache.cayenne.jpa.entity.MockEntity5;
-import org.apache.cayenne.jpa.entity.MockEntityMap1;
-import org.apache.cayenne.jpa.entity.MockEntityMap2;
-import org.apache.cayenne.jpa.entity.MockMappedSuperclass1;
-import org.apache.cayenne.jpa.entity.MockMappedSuperclass2;
-import org.apache.cayenne.jpa.entity.MockMappedSuperclass3;
+import org.apache.cayenne.jpa.entity.cayenne.MockCayenneEntity1;
+import org.apache.cayenne.jpa.entity.cayenne.MockCayenneEntity2;
+import org.apache.cayenne.jpa.entity.cayenne.MockCayenneEntityMap1;
 import org.apache.cayenne.jpa.map.JpaEntityMap;
 import org.objectstyle.cayenne.map.DataMap;
 import org.objectstyle.cayenne.validation.ValidationResult;
@@ -100,21 +91,10 @@
         ValidationResult conflicts = new ValidationResult();
         EntityMapAnnotationLoader loader = new EntityMapAnnotationLoader(conflicts);
 
-        loader.loadClassMapping(map, MockEntity1.class);
-        loader.loadClassMapping(map, MockEntity2.class);
-        loader.loadClassMapping(map, MockEntity3.class);
-        loader.loadClassMapping(map, MockEntity4.class);
-        loader.loadClassMapping(map, MockEntity5.class);
-
-        loader.loadClassMapping(map, MockEmbed1.class);
-        loader.loadClassMapping(map, MockEmbed2.class);
-
-        loader.loadClassMapping(map, MockMappedSuperclass1.class);
-        loader.loadClassMapping(map, MockMappedSuperclass2.class);
-        loader.loadClassMapping(map, MockMappedSuperclass3.class);
+        loader.loadClassMapping(map, MockCayenneEntity1.class);
+        loader.loadClassMapping(map, MockCayenneEntity2.class);
 
-        loader.loadClassMapping(map, MockEntityMap1.class);
-        loader.loadClassMapping(map, MockEntityMap2.class);
+        loader.loadClassMapping(map, MockCayenneEntityMap1.class);
 
         assertFalse("Found conflicts: " + conflicts, conflicts.hasFailures());
 

Modified: incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java?rev=397938&r1=397937&r2=397938&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java Fri Apr 28 09:00:24 2006
@@ -59,12 +59,8 @@
 
 import junit.framework.Assert;
 
-import org.apache.cayenne.jpa.map.JpaEntity;
-import org.apache.cayenne.jpa.map.JpaNamedNativeQuery;
-import org.apache.cayenne.jpa.map.JpaNamedQuery;
-import org.apache.cayenne.jpa.map.JpaSecondaryTable;
-import org.apache.cayenne.jpa.map.JpaTable;
-import org.apache.cayenne.jpa.map.JpaUniqueConstraint;
+import org.apache.cayenne.jpa.entity.cayenne.MockCayenneEntity1;
+import org.apache.cayenne.jpa.entity.cayenne.MockCayenneEntity2;
 import org.objectstyle.cayenne.map.DataMap;
 import org.objectstyle.cayenne.map.DbEntity;
 import org.objectstyle.cayenne.map.ObjEntity;
@@ -76,67 +72,31 @@
         assertEquals("n1", dataMap.getName());
 
         assertNotNull(dataMap.getObjEntities());
-        assertEquals(5, dataMap.getObjEntities().size());
+        assertEquals(2, dataMap.getObjEntities().size());
         Iterator<ObjEntity> entityIt = dataMap.getObjEntities().iterator();
         assertEntity1(entityIt.next());
-        // assertEntity2(entityIt.next());
-        // assertEntity3(entityIt.next());
-        // assertEntity4(entityIt.next());
-        // assertEntity5(entityIt.next());
-
-        // TODO: NOT SUPPORTED YET - Embeddable
-        // assertNotNull(dataMap.getEmbeddables());
-        // assertEquals(2, dataMap.getEmbeddables().size());
-        // Iterator<JpaEmbeddable> embedIt = dataMap.getEmbeddables().iterator();
-        // assertEmbeddable1(embedIt.next());
-
-        // TODO: NOT SUPPORTED YET - Mapped Superclass
-        // assertNotNull(dataMap.getMappedSuperclasses());
-        // assertEquals(3, dataMap.getMappedSuperclasses().size());
-        // Iterator<JpaMappedSuperclass> mappedSuperclassIt = dataMap
-        // .getMappedSuperclasses()
-        // .iterator();
-        // assertMappedSuperclass1(mappedSuperclassIt.next());
-        // assertMappedSuperclass2(mappedSuperclassIt.next());
-        // assertMappedSuperclass3(mappedSuperclassIt.next());
-
-        // TODO: NOT SUPPORTED YET - EntityListeners
-        // assertEntityListeners(dataMap.getDefaultEntityListeners());
+        assertEntity2(entityIt.next());
 
         assertEquals(2, dataMap.getQueries().size());
-        // Iterator<Query> namedQueryIt = dataMap.getQueries().iterator();
-        // assertNamedQuery1(namedQueryIt.next());
-        // assertNamedQuery2(namedQueryIt.next());
-
-        // TODO: NOT SUPPORTED YET - Native Named Queries, however SQLTemplates are
-        // supported as named queries.
-        // assertEquals(2, entityMap.getNamedNativeQueries().size());
-        // Iterator<JpaNamedNativeQuery> namedNativeQueryIt = entityMap
-        // .getNamedNativeQueries()
-        // .iterator();
-        // assertNativeNamedQuery3(namedNativeQueryIt.next());
-        // assertNativeNamedQuery4(namedNativeQueryIt.next());
-
-        // TODO: NOT SUPPORTED YET - SQLResultSetMapping
-        // assertEquals(2, entityMap.getSqlResultSetMappings().size());
-        // assertSqlResultSetMapping(entityMap.getSqlResultSetMappings().iterator().next());
-
-        // TODO: NOT SUPPORTED YET - Sequencegenerators (In fact we can support that
-        // already...)
-        // assertEquals(2, entityMap.getSequenceGenerators().size());
-        // assertSequenceGenerator1(entityMap.getSequenceGenerators().iterator().next());
-
-        // TODO: NOT SUPPORTED YET - Table Generators (we can support that already)
-        // assertEquals(2, entityMap.getTableGenerators().size());
-        // assertTableGenerator(entityMap.getTableGenerators().iterator().next());
     }
 
     protected void assertEntity1(ObjEntity entity1) {
+
         assertNotNull(entity1);
-        assertEquals("MockEntity1", entity1.getName());
-        assertEquals("org.apache.cayenne.jpa.entity.MockEntity1", entity1.getClassName());
+        assertEquals("MockCayenneEntity1", entity1.getName());
+        assertEquals(MockCayenneEntity1.class.getName(), entity1.getClassName());
 
         assertTable(entity1.getDbEntity());
+
+        assertEquals(3, entity1.getAttributeMap().size());
+        assertEquals(4, entity1.getRelationshipMap().size());
+    }
+
+    protected void assertEntity2(ObjEntity entity2) {
+
+        assertNotNull(entity2);
+        assertEquals("MockCayenneEntity2", entity2.getName());
+        assertEquals(MockCayenneEntity2.class.getName(), entity2.getClassName());
     }
 
     protected void assertTable(DbEntity table) {

Added: incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity1.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity1.java?rev=397938&view=auto
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity1.java (added)
+++ incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity1.java Fri Apr 28 09:00:24 2006
@@ -0,0 +1,119 @@
+/* ====================================================================
+ * 
+ * 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.apache.cayenne.jpa.entity.cayenne;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.QueryHint;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.apache.cayenne.jpa.entity.MockTargetEntity1;
+import org.apache.cayenne.jpa.entity.MockTargetEntity2;
+import org.objectstyle.cayenne.CayenneDataObject;
+
+@Entity
+@Table(name = "mock_persistent_1", catalog = "catalog1", schema = "schema1")
+@NamedQueries( {
+        @NamedQuery(name = "query1", query = "select x", hints = {
+                @QueryHint(name = "hint1", value = "value1"),
+                @QueryHint(name = "hint2", value = "value2")
+        }), @NamedQuery(name = "query2", query = "select y")
+})
+public class MockCayenneEntity1 extends CayenneDataObject {
+
+    @Basic
+    protected String attribute1;
+
+    @Version
+    protected int attribute2;
+
+    @OneToOne(targetEntity = MockTargetEntity1.class, fetch = FetchType.LAZY, optional = true, mappedBy = "mb1", cascade = {
+            CascadeType.MERGE, CascadeType.PERSIST
+    })
+    protected int attribute3;
+
+    @OneToMany(targetEntity = MockTargetEntity2.class, fetch = FetchType.LAZY, mappedBy = "mb2", cascade = {
+            CascadeType.MERGE, CascadeType.PERSIST
+    })
+    protected int attribute4;
+
+    @ManyToOne(targetEntity = MockTargetEntity1.class, fetch = FetchType.LAZY, optional = true, cascade = {
+            CascadeType.MERGE, CascadeType.PERSIST
+    })
+    protected int attribute5;
+
+    @ManyToMany(targetEntity = MockTargetEntity1.class, fetch = FetchType.LAZY, mappedBy = "mb4", cascade = {
+            CascadeType.MERGE, CascadeType.PERSIST
+    })
+    protected int attribute6;
+
+    @Transient
+    protected int attribute8;
+
+    @Column(name = "column9")
+    protected int attribute9;
+}

Added: incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity2.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity2.java?rev=397938&view=auto
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity2.java (added)
+++ incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntity2.java Fri Apr 28 09:00:24 2006
@@ -0,0 +1,65 @@
+/* ====================================================================
+ * 
+ * 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.apache.cayenne.jpa.entity.cayenne;
+
+import javax.persistence.Entity;
+
+import org.objectstyle.cayenne.CayenneDataObject;
+
+@Entity
+public class MockCayenneEntity2 extends CayenneDataObject {
+
+}

Added: incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntityMap1.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntityMap1.java?rev=397938&view=auto
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntityMap1.java (added)
+++ incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/entity/cayenne/MockCayenneEntityMap1.java Fri Apr 28 09:00:24 2006
@@ -0,0 +1,70 @@
+/* ====================================================================
+ * 
+ * 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.apache.cayenne.jpa.entity.cayenne;
+
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.QueryHint;
+
+@NamedQueries( {
+        @NamedQuery(name = "query1", query = "select x", hints = {
+                @QueryHint(name = "hint1", value = "value1"),
+                @QueryHint(name = "hint2", value = "value2")
+        }), @NamedQuery(name = "query2", query = "select y")
+})
+public class MockCayenneEntityMap1 {
+
+}