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 2007/12/17 00:25:07 UTC
svn commit: r604738 - in /cayenne/main/trunk:
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/
framework/cayenne-jdk1.5-unpublished/src/main/j...
Author: aadamchik
Date: Sun Dec 16 15:25:01 2007
New Revision: 604738
URL: http://svn.apache.org/viewvc?rev=604738&view=rev
Log:
CAY-734 Link JPA Embeddable and Embedded annotations with Cayenne runtime
(basically working)
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java
cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml
cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/enhancer/EmbeddableVisitor.java Sun Dec 16 15:25:01 2007
@@ -40,7 +40,7 @@
@Override
public void visitEnd() {
- helper.createProperty(Persistent.class, "owner");
- helper.createProperty(String.class, "embeddedProperty");
+ helper.createField(Persistent.class, "owner");
+ helper.createField(String.class, "embeddedProperty");
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/FieldEmbeddableDescriptor.java Sun Dec 16 15:25:01 2007
@@ -34,7 +34,8 @@
protected Accessor ownerAccessor;
protected Accessor embeddedPropertyAccessor;
- public FieldEmbeddableDescriptor(Embeddable embeddable) {
+ public FieldEmbeddableDescriptor(Embeddable embeddable, String ownerProperty,
+ String embeddedPropertyProperty) {
this.embeddable = embeddable;
try {
this.embeddableClass = Class.forName(embeddable.getClassName(), true, Thread
@@ -45,10 +46,13 @@
throw new PropertyException("Class not found", e);
}
- this.ownerAccessor = new FieldAccessor(embeddableClass, "owner", Persistent.class);
+ this.ownerAccessor = new FieldAccessor(
+ embeddableClass,
+ ownerProperty,
+ Persistent.class);
this.embeddedPropertyAccessor = new FieldAccessor(
embeddableClass,
- "embeddedProperty",
+ embeddedPropertyProperty,
String.class);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java Sun Dec 16 15:25:01 2007
@@ -159,10 +159,7 @@
embeddableName,
attribute.getJavaClass());
- // TODO: andrus, 11/19/2007 = avoid creation of descriptor for every property of
- // embeddable; look up reusable descriptor instead.
- EmbeddableDescriptor embeddableDescriptor = new FieldEmbeddableDescriptor(
- embeddedAttribute.getEmbeddable());
+ EmbeddableDescriptor embeddableDescriptor = createEmbeddableDescriptor(embeddedAttribute);
Accessor accessor = new EmbeddedFieldAccessor(
embeddableDescriptor,
@@ -243,5 +240,15 @@
String propertyName,
Class<?> propertyType) {
return new FieldAccessor(embeddableClass, propertyName, propertyType);
+ }
+
+ protected EmbeddableDescriptor createEmbeddableDescriptor(
+ EmbeddedAttribute embeddedAttribute) {
+ // TODO: andrus, 11/19/2007 = avoid creation of descriptor for every property of
+ // embeddable; look up reusable descriptor instead.
+ return new FieldEmbeddableDescriptor(
+ embeddedAttribute.getEmbeddable(),
+ "owner",
+ "embeddedProperty");
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/reflect/pojo/EnhancedPojoDescriptorFactory.java Sun Dec 16 15:25:01 2007
@@ -23,13 +23,17 @@
import java.util.Map;
import java.util.Set;
+import org.apache.cayenne.enhancer.EnhancementHelper;
+import org.apache.cayenne.map.EmbeddedAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.reflect.Accessor;
import org.apache.cayenne.reflect.ClassDescriptor;
import org.apache.cayenne.reflect.ClassDescriptorFactory;
import org.apache.cayenne.reflect.ClassDescriptorMap;
+import org.apache.cayenne.reflect.EmbeddableDescriptor;
import org.apache.cayenne.reflect.FaultFactory;
+import org.apache.cayenne.reflect.FieldEmbeddableDescriptor;
import org.apache.cayenne.reflect.PersistentDescriptor;
import org.apache.cayenne.reflect.PersistentDescriptorFactory;
import org.apache.cayenne.reflect.Property;
@@ -45,11 +49,13 @@
static final String PERSISTENCE_STATE_FIELD = "$cay_persistenceState";
protected FaultFactory faultFactory;
+ protected EnhancementHelper fieldNameMapper;
public EnhancedPojoDescriptorFactory(ClassDescriptorMap descriptorMap,
FaultFactory faultFactory) {
super(descriptorMap);
this.faultFactory = faultFactory;
+ this.fieldNameMapper = new EnhancementHelper(null);
}
protected ClassDescriptor getDescriptor(ObjEntity entity, Class<?> entityClass) {
@@ -154,5 +160,18 @@
accessor,
reverseName,
faultFactory.getToOneFault()));
+ }
+
+ @Override
+ protected EmbeddableDescriptor createEmbeddableDescriptor(
+ EmbeddedAttribute embeddedAttribute) {
+
+ // TODO: andrus, 11/19/2007 = avoid creation of descriptor for every property of
+ // embeddable; look up reusable descriptor instead.
+
+ return new FieldEmbeddableDescriptor(
+ embeddedAttribute.getEmbeddable(),
+ fieldNameMapper.getPropertyField("owner"),
+ fieldNameMapper.getPropertyField("embeddedProperty"));
}
}
Modified: cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jpa-unpublished/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java Sun Dec 16 15:25:01 2007
@@ -23,6 +23,7 @@
import java.lang.reflect.Field;
import java.util.Iterator;
+import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.jpa.JpaProviderException;
import org.apache.cayenne.jpa.conf.EntityMapLoaderContext;
import org.apache.cayenne.jpa.map.AccessType;
@@ -250,7 +251,7 @@
Object createObject(ProjectPath path) {
JpaEmbedded jpaEmbedded = (JpaEmbedded) path.getObject();
- ObjEntity parentCayenneEntity = (ObjEntity) targetPath.getObject();
+ ObjEntity entity = (ObjEntity) targetPath.getObject();
EmbeddedAttribute embedded = new EmbeddedAttribute(jpaEmbedded.getName());
embedded.setType(jpaEmbedded.getPropertyDescriptor().getType().getName());
@@ -260,7 +261,14 @@
.getColumn()
.getName());
}
- parentCayenneEntity.addAttribute(embedded);
+ entity.addAttribute(embedded);
+
+ DbEntity dbEntity = entity.getDbEntity();
+ for (ObjAttribute attribute : embedded.getAttributes()) {
+ DbAttribute dbAttribute = new DbAttribute(attribute.getDbAttributeName());
+ dbAttribute.setType(TypesMapping.getSqlTypeByJava(attribute.getType()));
+ dbEntity.addAttribute(dbAttribute);
+ }
return embedded;
}
@@ -393,7 +401,7 @@
public boolean onStartNode(ProjectPath path) {
JpaColumn jpaColumn = (JpaColumn) path.getObject();
- // skip embeddable columns
+ // skip embeddable columns - they are mapped per entity
if (path.firstInstanceOf(JpaEmbeddable.class) != null) {
return false;
}
Modified: cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml (original)
+++ cayenne/main/trunk/itests/jpa-chapter2/src/main/resources/META-INF/persistence.xml Sun Dec 16 15:25:01 2007
@@ -44,5 +44,6 @@
<class>org.apache.cayenne.jpa.itest.ch2.entity.BidiOneToOneOwned</class>
<class>org.apache.cayenne.jpa.itest.ch2.entity.BidiOneToManyOwner</class>
<class>org.apache.cayenne.jpa.itest.ch2.entity.BidiOneToManyOwned</class>
+ <class>org.apache.cayenne.jpa.itest.ch2.entity.Embeddable1</class>
</persistence-unit>
</persistence>
Modified: cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java?rev=604738&r1=604737&r2=604738&view=diff
==============================================================================
--- cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java (original)
+++ cayenne/main/trunk/itests/jpa-chapter2/src/test/java/org/apache/cayenne/jpa/itest/ch2/_2_1_5_EmbeddableTest.java Sun Dec 16 15:25:01 2007
@@ -35,6 +35,6 @@
getEntityManager().persist(o1);
getEntityManager().getTransaction().commit();
- // assertEquals("p1", getDbHelper().getObject("EmbeddedEntity", "property1"));
+ assertEquals("p1", getDbHelper().getObject("EmbeddedEntity", "property1"));
}
}