You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/09/02 13:49:41 UTC

[21/50] [abbrv] git commit: [OLINGO - 127] - Support for handling JPA annotation JoinColumn without "name" and "referencedColumnName" attributes.

[OLINGO - 127] 
- Support for handling JPA annotation JoinColumn without "name" and
"referencedColumnName" attributes.

- Support for handling JPA annotation JoinColumns.

- Fix for naming convention for Foreign key properties.

- Adapt Reference scenario to show case the above new features

Signed-off-by: Chandan V A <ch...@sap.com>

Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/13093430
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/13093430
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/13093430

Branch: refs/heads/Olingo-129_PocJpaDataStore
Commit: 130934309353f4a7d46eb782490c1256b9286b68
Parents: afa3a45
Author: Chandan V A <ch...@sap.com>
Authored: Sat Jun 28 17:48:17 2014 +0530
Committer: Chandan V A <ch...@sap.com>
Committed: Sat Jun 28 17:48:17 2014 +0530

----------------------------------------------------------------------
 .../api/model/JPAEdmAssociationEndView.java     |  4 +-
 .../processor/api/model/JPAEdmPropertyView.java |  6 +-
 .../core/access/data/JPAEntityParser.java       | 10 ++++
 .../core/access/model/JPAEdmNameBuilder.java    | 10 ++--
 .../core/access/model/JPATypeConvertor.java     |  2 +-
 .../processor/core/model/JPAEdmAssociation.java | 13 ++--
 .../core/model/JPAEdmAssociationEnd.java        | 33 +++++-----
 .../processor/core/model/JPAEdmProperty.java    | 63 ++++++++++++++------
 .../model/JPAEdmReferentialConstraintRole.java  | 24 +++-----
 .../core/model/JPAEdmAssociationTest.java       | 23 +++++--
 .../JPAEdmReferentialConstraintRoleTest.java    | 20 +++----
 .../model/JPAEdmReferentialConstraintTest.java  | 18 +++---
 .../core/model/JPAEdmTestModelView.java         |  7 +--
 .../ref/converter/BlobToByteConverter.java      |  6 ++
 .../jpa/processor/ref/model/Category.java       | 12 ++++
 .../jpa/processor/ref/model/Material.java       |  9 +--
 .../processor/ref/model/SalesOrderHeader.java   |  2 +-
 .../jpa/processor/ref/model/SalesOrderItem.java |  2 +-
 .../ref/web/JPAReferenceServiceFactory.java     |  1 +
 .../resources/SQL_Insert_Category.properties    |  8 +--
 .../resources/SQL_Insert_Material.properties    | 22 +++----
 .../SQL_Insert_SalesOrderHeader.properties      | 22 +++----
 22 files changed, 183 insertions(+), 134 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmAssociationEndView.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmAssociationEndView.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmAssociationEndView.java
index 2d1262e..44ef3b2 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmAssociationEndView.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmAssociationEndView.java
@@ -80,9 +80,9 @@ public interface JPAEdmAssociationEndView extends JPAEdmBaseView {
    */
   boolean compare(AssociationEnd end1, AssociationEnd end2);
 
-  String getJoinColumnName();
+  String[] getJoinColumnNames();
 
-  String getJoinColumnReferenceColumnName();
+  String[] getJoinColumnReferenceColumnNames();
 
   String getMappedByName();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
index 419d622..3ce66d6 100644
--- a/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
+++ b/odata2-jpa-processor/jpa-api/src/main/java/org/apache/olingo/odata2/jpa/processor/api/model/JPAEdmPropertyView.java
@@ -20,7 +20,6 @@ package org.apache.olingo.odata2.jpa.processor.api.model;
 
 import java.util.List;
 
-import javax.persistence.JoinColumn;
 import javax.persistence.metamodel.Attribute;
 
 import org.apache.olingo.odata2.api.edm.provider.Property;
@@ -115,7 +114,8 @@ public interface JPAEdmPropertyView extends JPAEdmBaseView {
   /**
    * The method returns a list of JPA Join Column Annotations for the given JPA Attribute
    * @return
-   * an instance of type {@link javax.persistence.JoinColumn}
+   * a list of Array of Strings. First element in the Array represents the join column name and the second element in
+   * the array represents the referencedColumn name
    */
-  List<JoinColumn> getJPAJoinColumns();
+  List<String[]> getJPAJoinColumns();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParser.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParser.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParser.java
index 1314ed2..9543bfe 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParser.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAEntityParser.java
@@ -260,6 +260,11 @@ public final class JPAEntityParser {
 
   public static String getString(final Clob clob) throws ODataJPARuntimeException {
     try {
+
+      if (clob == null) {
+        return null;
+      }
+
       Reader stringReader = clob.getCharacterStream();
       StringWriter buffer = null;
       long clobSize = clob.length();
@@ -307,8 +312,13 @@ public final class JPAEntityParser {
 
   public static byte[] getBytes(final Blob blob) throws ODataJPARuntimeException {
     try {
+
+      if (blob == null) {
+        return null;
+      }
       InputStream is = null;
       ByteArrayOutputStream buffer = null;
+
       long blobSize = blob.length();
       long remainingBlobSize = blobSize;
       int len = 0;

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java
index 1f0e152..75878e6 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPAEdmNameBuilder.java
@@ -22,7 +22,6 @@ import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Field;
 
 import javax.persistence.Column;
-import javax.persistence.JoinColumn;
 import javax.persistence.metamodel.Attribute;
 import javax.persistence.metamodel.ManagedType;
 import javax.persistence.metamodel.PluralAttribute;
@@ -129,6 +128,7 @@ public class JPAEdmNameBuilder {
     Attribute<?, ?> jpaAttribute = view.getJPAAttribute();
     String jpaAttributeName = jpaAttribute.getName();
     String propertyName = null;
+    String[] joinColumnNames = null;
 
     JPAEdmMappingModelAccess mappingModelAccess = view.getJPAEdmMappingModelAccess();
     if (mappingModelAccess != null && mappingModelAccess.isMappingModelExists()) {
@@ -147,7 +147,8 @@ public class JPAEdmNameBuilder {
     } else if (propertyName == null) {
       propertyName = jpaAttributeName;
       if (isForeignKey == true) {
-        propertyName = FK_PREFIX + UNDERSCORE + propertyName;
+        joinColumnNames = view.getJPAJoinColumns().get(view.getJPAJoinColumns().size() - 1);
+        propertyName = FK_PREFIX + UNDERSCORE + joinColumnNames[0];
       }
     }
 
@@ -162,9 +163,8 @@ public class JPAEdmNameBuilder {
       if (column != null) {
         mapping.setJPAColumnName(column.name());
       } else {
-        JoinColumn joinColumn = annotatedElement.getAnnotation(JoinColumn.class);
-        if (joinColumn != null) {
-          mapping.setJPAColumnName(joinColumn.name());
+        if (joinColumnNames != null) {
+          mapping.setJPAColumnName(joinColumnNames[0]);
           jpaAttributeName += "." + view.getJPAReferencedAttribute().getName();
         }
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java
index 685ee83..063b297 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/model/JPATypeConvertor.java
@@ -23,7 +23,7 @@ import java.math.BigDecimal;
 import java.sql.Blob;
 import java.sql.Clob;
 import java.util.Calendar;
-import java.util.Date;
+import java.sql.Date;
 import java.util.UUID;
 
 import javax.persistence.Lob;

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociation.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociation.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociation.java
index 537a4f8..9f35c3a 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociation.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociation.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.odata2.jpa.processor.core.model;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -94,11 +95,13 @@ public class JPAEdmAssociation extends JPAEdmBaseViewImpl implements JPAEdmAssoc
         if (association != null) {
           if (view.compare(association.getEnd1(), association.getEnd2())) {
             JPAEdmAssociationEndView associationEnd = associationEndMap.get(association.getName());
-            if (associationEnd.getJoinColumnName() != null && associationEnd.getJoinColumnReferenceColumnName() != null
-                && view.getJoinColumnName() != null && view.getJoinColumnReferenceColumnName() != null) {
-              if (view.getJoinColumnName().equals(associationEnd.getJoinColumnName())
-                  && view.getJoinColumnReferenceColumnName()
-                      .equals(associationEnd.getJoinColumnReferenceColumnName())) {
+            if (associationEnd.getJoinColumnNames() != null
+                && associationEnd.getJoinColumnReferenceColumnNames() != null
+                && view.getJoinColumnNames() != null && view.getJoinColumnReferenceColumnNames() != null) {
+              if (Arrays.equals(view.getJoinColumnNames(), associationEnd.getJoinColumnNames())
+                  &&
+                  Arrays.equals(view.getJoinColumnReferenceColumnNames(), associationEnd
+                      .getJoinColumnReferenceColumnNames())) {
                 currentAssociation = association;
                 return association;
               }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java
index 0fdaee0..d3af0e9 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationEnd.java
@@ -19,8 +19,9 @@
 package org.apache.olingo.odata2.jpa.processor.core.model;
 
 import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Array;
+import java.util.List;
 
-import javax.persistence.JoinColumn;
 import javax.persistence.ManyToMany;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
@@ -41,8 +42,8 @@ public class JPAEdmAssociationEnd extends JPAEdmBaseViewImpl implements JPAEdmAs
   private JPAEdmPropertyView propertyView = null;
   private AssociationEnd currentAssociationEnd1 = null;
   private AssociationEnd currentAssociationEnd2 = null;
-  private String columnName;
-  private String referencedColumnName;
+  private String[] columnNames;
+  private String[] referencedColumnNames;
   private String mappedBy;
   private String ownerPropertyName;
 
@@ -76,8 +77,6 @@ public class JPAEdmAssociationEnd extends JPAEdmBaseViewImpl implements JPAEdmAs
     @Override
     public void build() throws ODataJPAModelException {
 
-      JoinColumn joinColumn = null;
-
       currentAssociationEnd1 = new AssociationEnd();
       currentAssociationEnd2 = new AssociationEnd();
 
@@ -88,17 +87,17 @@ public class JPAEdmAssociationEnd extends JPAEdmBaseViewImpl implements JPAEdmAs
 
       setEdmMultiplicity(propertyView.getJPAAttribute().getPersistentAttributeType());
 
-      AnnotatedElement annotatedElement = (AnnotatedElement) propertyView.getJPAAttribute().getJavaMember();
-      if (annotatedElement != null) {
-        joinColumn = annotatedElement.getAnnotation(JoinColumn.class);
-        if (joinColumn != null) {
-          columnName = joinColumn.name();
-          referencedColumnName = joinColumn.referencedColumnName();
+      List<String[]> joinColumnNames = propertyView.getJPAJoinColumns();
+      if (joinColumnNames != null) {
+        int i = 0;
+        columnNames = (String[]) Array.newInstance(String.class, joinColumnNames.size());
+        referencedColumnNames = (String[]) Array.newInstance(String.class, joinColumnNames.size());
+        for (String[] jc : joinColumnNames) {
+          columnNames[i] = jc[0];
+          referencedColumnNames[i++] = jc[1];
         }
-
       }
       ownerPropertyName = propertyView.getJPAAttribute().getName();
-
     }
 
     private void setEdmMultiplicity(final PersistentAttributeType type) {
@@ -161,13 +160,13 @@ public class JPAEdmAssociationEnd extends JPAEdmBaseViewImpl implements JPAEdmAs
   }
 
   @Override
-  public String getJoinColumnName() {
-    return columnName;
+  public String[] getJoinColumnNames() {
+    return columnNames;
   }
 
   @Override
-  public String getJoinColumnReferenceColumnName() {
-    return referencedColumnName;
+  public String[] getJoinColumnReferenceColumnNames() {
+    return referencedColumnNames;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
index 0726626..dbae270 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmProperty.java
@@ -74,7 +74,7 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
   private Attribute<?, ?> currentRefAttribute;
   private boolean isBuildModeComplexType;
   private Map<String, Integer> associationCount;
-  private ArrayList<JoinColumn> bJoinColumns = null;
+  private ArrayList<String[]> joinColumnNames = null;
 
   public JPAEdmProperty(final JPAEdmSchemaView view) {
     super(view);
@@ -140,8 +140,8 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
   }
 
   @Override
-  public List<JoinColumn> getJPAJoinColumns() {
-    return bJoinColumns;
+  public List<String[]> getJPAJoinColumns() {
+    return joinColumnNames;
   }
 
   private class JPAEdmPropertyBuilder implements JPAEdmBuilder {
@@ -348,7 +348,7 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
         ODataJPARuntimeException {
 
       AnnotatedElement annotatedElement = (AnnotatedElement) jpaAttribute.getJavaMember();
-      bJoinColumns = null;
+      joinColumnNames = null;
       if (annotatedElement == null) {
         return;
       }
@@ -356,27 +356,52 @@ public class JPAEdmProperty extends JPAEdmBaseViewImpl implements
       if (joinColumn == null) {
         JoinColumns joinColumns = annotatedElement.getAnnotation(JoinColumns.class);
         if (joinColumns != null) {
-          return;
+          for (JoinColumn jc : joinColumns.value()) {
+            buildForeignKey(jc, jpaAttribute);
+          }
         }
       } else {
-        bJoinColumns = bJoinColumns == null ? new ArrayList<JoinColumn>() : bJoinColumns;
-        bJoinColumns.add(joinColumn);
-        if (joinColumn.insertable() && joinColumn.updatable()) {
-          EntityType<?> referencedEntityType = metaModel.entity(jpaAttribute.getJavaType());
-          for (Attribute<?, ?> referencedAttribute : referencedEntityType.getAttributes()) {
-            AnnotatedElement annotatedElement2 = (AnnotatedElement) referencedAttribute.getJavaMember();
-            if (annotatedElement2 != null) {
-              Column referencedColumn = annotatedElement2.getAnnotation(Column.class);
-              if (referencedColumn != null && referencedColumn.name().equals((joinColumn.referencedColumnName()))) {
-                currentRefAttribute = referencedAttribute;
-                currentSimpleProperty = new SimpleProperty();
-                properties.add(buildSimpleProperty(currentRefAttribute, currentSimpleProperty, true));
-                break;
-              }
+        buildForeignKey(joinColumn, jpaAttribute);
+      }
+    }
+
+    private void buildForeignKey(JoinColumn joinColumn, Attribute<?, ?> jpaAttribute) throws ODataJPAModelException,
+        ODataJPARuntimeException {
+      joinColumnNames = joinColumnNames == null ? new ArrayList<String[]>() : joinColumnNames;
+      String[] name = { null, null };
+      name[0] = joinColumn.name().equals("") == true ? jpaAttribute.getName() : joinColumn.name();
+
+      EntityType<?> referencedEntityType = metaModel.entity(jpaAttribute.getJavaType());
+      if (joinColumn.referencedColumnName().equals("")) {
+        for (Attribute<?, ?> referencedAttribute : referencedEntityType.getAttributes()) {
+          if (referencedAttribute.getPersistentAttributeType() == PersistentAttributeType.BASIC &&
+              ((SingularAttribute<?, ?>) referencedAttribute).isId()) {
+            name[1] = referencedAttribute.getName();
+            joinColumnNames.add(name);
+            currentRefAttribute = referencedAttribute;
+            break;
+          }
+        }
+      } else {
+        for (Attribute<?, ?> referencedAttribute : referencedEntityType.getAttributes()) {
+          AnnotatedElement annotatedElement2 = (AnnotatedElement) referencedAttribute.getJavaMember();
+          if (annotatedElement2 != null) {
+            Column referencedColumn = annotatedElement2.getAnnotation(Column.class);
+            if (referencedColumn != null && referencedColumn.name().equals((joinColumn.referencedColumnName()))) {
+              name[1] = referencedColumn.name();
+              joinColumnNames.add(name);
+              currentRefAttribute = referencedAttribute;
+              break;
             }
           }
         }
       }
+
+      if (joinColumn.insertable() && joinColumn.updatable()) {
+        currentSimpleProperty = new SimpleProperty();
+        properties.add(buildSimpleProperty(currentRefAttribute, currentSimpleProperty, true));
+      }
+
     }
 
     @SuppressWarnings("rawtypes")

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
index b36398a..94905e9 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRole.java
@@ -23,7 +23,6 @@ import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.persistence.JoinColumn;
 import javax.persistence.metamodel.Attribute;
 
 import org.apache.olingo.odata2.api.edm.provider.Association;
@@ -48,9 +47,8 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
   private JPAEdmReferentialConstraintRoleView.RoleType roleType;
 
   private Attribute<?, ?> jpaAttribute;
-  private ArrayList<String> jpaColumnNames;
+  private List<String[]> jpaColumnNames;
   private Association association;
-  private List<JoinColumn> bufferedJoinColumns = null;
 
   private boolean roleExists = false;
 
@@ -66,7 +64,7 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
     this.roleType = roleType;
 
     jpaAttribute = propertyView.getJPAAttribute();
-    bufferedJoinColumns = propertyView.getJPAJoinColumns();
+    jpaColumnNames = propertyView.getJPAJoinColumns();
     association = associationView.getEdmAssociation();
 
   }
@@ -133,21 +131,12 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
       firstBuild = false;
       isConsistent = false;
 
-      if (bufferedJoinColumns == null || bufferedJoinColumns.isEmpty()) {
+      if (jpaColumnNames == null || jpaColumnNames.isEmpty()) {
         roleExists = false;
         return;
       } else {
         roleExists = true;
       }
-      jpaColumnNames = new ArrayList<String>();
-
-      for (JoinColumn joinColumn : bufferedJoinColumns) {
-        if (roleType == RoleType.PRINCIPAL) {
-          jpaColumnNames.add(joinColumn.referencedColumnName());
-        } else if (roleType == RoleType.DEPENDENT) {
-          jpaColumnNames.add(joinColumn.name());
-        }
-      }
     }
 
     private void buildRole() throws SecurityException, NoSuchFieldException {
@@ -174,9 +163,12 @@ public class JPAEdmReferentialConstraintRole extends JPAEdmBaseViewImpl implemen
 
         List<PropertyRef> propertyRefs = new ArrayList<PropertyRef>();
         if (edmEntityType != null) {
-          for (String columnName : jpaColumnNames) {
+          for (String[] columnName : jpaColumnNames) {
             for (Property property : edmEntityType.getProperties()) {
-              if (columnName.equals(((JPAEdmMapping) property.getMapping()).getJPAColumnName())) {
+              if (columnName[0].equals(((JPAEdmMapping) property.getMapping()).getJPAColumnName()) ||
+                  columnName[0].equals(property.getName()) ||
+                  columnName[1].equals(((JPAEdmMapping) property.getMapping()).getJPAColumnName()) ||
+                  columnName[1].equals(property.getName())) {
                 PropertyRef propertyRef = new PropertyRef();
                 propertyRef.setName(property.getName());
                 propertyRefs.add(propertyRef);

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationTest.java
index 186a864..eea4433 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmAssociationTest.java
@@ -28,7 +28,9 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Field;
 import java.lang.reflect.Member;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.persistence.JoinColumn;
@@ -59,6 +61,7 @@ public class JPAEdmAssociationTest extends JPAEdmTestModelView {
   private JPAEdmAssociationTest localView = null;
   private static final String PUNIT_NAME = "salesorderprocessing";
   private int variant;
+  private List<String[]> joinColumnNames = null;
 
   @Before
   public void setup() {
@@ -183,6 +186,18 @@ public class JPAEdmAssociationTest extends JPAEdmTestModelView {
   @Test
   public void testSearchAssociation1() {
     class TestAssociationEndView extends JPAEdmTestModelView {
+
+      @Override
+      public List<String[]> getJPAJoinColumns() {
+        if (joinColumnNames == null) {
+
+          joinColumnNames = new ArrayList<String[]>();
+          String[] names = { "SOID", "DEMO_ID" };
+          joinColumnNames.add(names);
+        }
+        return joinColumnNames;
+      }
+
       @Override
       public String getEdmRelationShipName() {
         return "SalesOrderHeader_String1";
@@ -199,13 +214,13 @@ public class JPAEdmAssociationTest extends JPAEdmTestModelView {
       }
 
       @Override
-      public String getJoinColumnName() {
-        return "SO_ID";
+      public String[] getJoinColumnNames() {
+        return new String[] { "SO_ID" };
       }
 
       @Override
-      public String getJoinColumnReferenceColumnName() {
-        return "DEMO_ID";
+      public String[] getJoinColumnReferenceColumnNames() {
+        return new String[] { "DEMO_ID" };
       }
 
       @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java
index cee6ead..656af8d 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintRoleTest.java
@@ -55,7 +55,7 @@ public class JPAEdmReferentialConstraintRoleTest extends JPAEdmTestModelView {
 
   private static JPAEdmReferentialConstraintRole objJPAEdmReferentialConstraintRole = null;
   private static JPAEdmReferentialConstraintRoleTest objJPAEdmReferentialConstraintRoleTest = null;
-  private List<JoinColumn> bufferedJoinColumns = null;
+  private List<String[]> joinColumnNames = null;
 
   @Before
   public void setUp() {
@@ -148,18 +148,14 @@ public class JPAEdmReferentialConstraintRoleTest extends JPAEdmTestModelView {
   }
 
   @Override
-  public List<JoinColumn> getJPAJoinColumns() {
-    if (bufferedJoinColumns == null) {
-      JoinColumn joinColumn = EasyMock.createMock(JoinColumn.class);
-      EasyMock.expect(joinColumn.referencedColumnName()).andReturn("SOID");
-      EasyMock.expect(joinColumn.name()).andReturn("SOID");
-
-      EasyMock.replay(joinColumn);
+  public List<String[]> getJPAJoinColumns() {
+    if (joinColumnNames == null) {
 
-      bufferedJoinColumns = new ArrayList<JoinColumn>();
-      bufferedJoinColumns.add(joinColumn);
+      joinColumnNames = new ArrayList<String[]>();
+      String[] names = { "SOID", "SOID" };
+      joinColumnNames.add(names);
     }
-    return bufferedJoinColumns;
+    return joinColumnNames;
   }
 
   @Override
@@ -244,8 +240,6 @@ public class JPAEdmReferentialConstraintRoleTest extends JPAEdmTestModelView {
 
       EasyMock.replay(joinColumn);
 
-      bufferedJoinColumns = new ArrayList<JoinColumn>();
-      bufferedJoinColumns.add(joinColumn);
       return (T) joinColumn;
     }
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java
index 86181b7..1e26654 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmReferentialConstraintTest.java
@@ -50,7 +50,7 @@ public class JPAEdmReferentialConstraintTest extends JPAEdmTestModelView {
 
   private static JPAEdmReferentialConstraint objJPAEdmReferentialConstraint = null;
   private static JPAEdmReferentialConstraintTest objJPAEdmReferentialConstraintTest = null;
-  private List<JoinColumn> bufferedJoinColumns = null;
+  private List<String[]> joinColumnNames = null;
 
   @Before
   public void setUp() {
@@ -129,18 +129,14 @@ public class JPAEdmReferentialConstraintTest extends JPAEdmTestModelView {
   }
 
   @Override
-  public List<JoinColumn> getJPAJoinColumns() {
-    if (bufferedJoinColumns == null) {
-      JoinColumn joinColumn = EasyMock.createMock(JoinColumn.class);
-      EasyMock.expect(joinColumn.referencedColumnName()).andReturn("SOID");
-      EasyMock.expect(joinColumn.name()).andReturn("SOID");
-
-      EasyMock.replay(joinColumn);
+  public List<String[]> getJPAJoinColumns() {
+    if (joinColumnNames == null) {
 
-      bufferedJoinColumns = new ArrayList<JoinColumn>();
-      bufferedJoinColumns.add(joinColumn);
+      joinColumnNames = new ArrayList<String[]>();
+      String[] names = { "SOID", "SOID" };
+      joinColumnNames.add(names);
     }
-    return bufferedJoinColumns;
+    return joinColumnNames;
   }
 
   @SuppressWarnings("hiding")

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java
index 639ad52..df20a50 100644
--- a/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java
+++ b/odata2-jpa-processor/jpa-core/src/test/java/org/apache/olingo/odata2/jpa/processor/core/model/JPAEdmTestModelView.java
@@ -21,7 +21,6 @@ package org.apache.olingo.odata2.jpa.processor.core.model;
 import java.util.HashMap;
 import java.util.List;
 
-import javax.persistence.JoinColumn;
 import javax.persistence.metamodel.Attribute;
 import javax.persistence.metamodel.EmbeddableType;
 import javax.persistence.metamodel.Metamodel;
@@ -357,13 +356,13 @@ public class JPAEdmTestModelView implements JPAEdmAssociationEndView, JPAEdmAsso
   }
 
   @Override
-  public String getJoinColumnName() {
+  public String[] getJoinColumnNames() {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public String getJoinColumnReferenceColumnName() {
+  public String[] getJoinColumnReferenceColumnNames() {
     // TODO Auto-generated method stub
     return null;
   }
@@ -405,7 +404,7 @@ public class JPAEdmTestModelView implements JPAEdmAssociationEndView, JPAEdmAsso
   }
 
   @Override
-  public List<JoinColumn> getJPAJoinColumns() {
+  public List<String[]> getJPAJoinColumns() {
     // TODO Auto-generated method stub
     return null;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/converter/BlobToByteConverter.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/converter/BlobToByteConverter.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/converter/BlobToByteConverter.java
index b6b01cf..e950d69 100644
--- a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/converter/BlobToByteConverter.java
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/converter/BlobToByteConverter.java
@@ -34,6 +34,9 @@ public class BlobToByteConverter implements AttributeConverter<Blob, byte[]> {
 
   @Override
   public byte[] convertToDatabaseColumn(final Blob arg0) {
+    if (arg0 == null) {
+      return null;
+    }
     ByteArrayOutputStream buffer = new ByteArrayOutputStream();
     InputStream is;
     try {
@@ -55,6 +58,9 @@ public class BlobToByteConverter implements AttributeConverter<Blob, byte[]> {
   @Override
   public Blob convertToEntityAttribute(final byte[] arg0) {
     try {
+      if (arg0 == null) {
+        return null;
+      }
       return new JDBCBlob(arg0);
     } catch (SQLException e) {
       e.printStackTrace();

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Category.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Category.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Category.java
index 22e2966..f0ff23f 100644
--- a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Category.java
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Category.java
@@ -35,6 +35,10 @@ public class Category {
   @Column(name = "CODE")
   private char code[] = new char[2];
 
+  @Id
+  @Column(name = "ID")
+  private long id;
+
   @Column(name = "DESC")
   private String description;
 
@@ -49,6 +53,14 @@ public class Category {
     this.materials = materials;
   }
 
+  public long getId() {
+    return id;
+  }
+
+  public void setId(long id) {
+    this.id = id;
+  }
+
   public char[] getCode() {
     return code;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Material.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Material.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Material.java
index 356909f..8a2ef0c 100644
--- a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Material.java
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/Material.java
@@ -28,18 +28,14 @@ import javax.persistence.Convert;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
+import javax.persistence.JoinColumns;
 import javax.persistence.Lob;
 import javax.persistence.ManyToMany;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 
-import org.eclipse.persistence.annotations.Converter;
-
 @Entity
 @Table(name = "T_MATERIAL")
-@Converter(
-    name = "BlobToByteConverter",
-    converterClass = org.apache.olingo.odata2.jpa.processor.ref.converter.BlobToByteConverter.class)
 public class Material {
 
   public Material() {}
@@ -82,7 +78,8 @@ public class Material {
   private List<Store> stores = new ArrayList<Store>();
 
   @ManyToOne
-  @JoinColumn(name = "TYPE_CODE", referencedColumnName = "CODE")
+  @JoinColumns({ @JoinColumn(name = "TYPE_CODE", referencedColumnName = "CODE"),
+      @JoinColumn(name = "CAT_ID", referencedColumnName = "ID") })
   private Category category;
 
   public long getMaterialId() {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
index f54bbe7..0525017 100644
--- a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderHeader.java
@@ -89,7 +89,7 @@ public class SalesOrderHeader {
   private List<Note> notes = new ArrayList<Note>();
 
   @ManyToOne
-  @JoinColumn(name = "CUST_ID", referencedColumnName = "ID")
+  @JoinColumn
   private Customer customer;
 
   public Customer getCustomer() {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java
index 44bf6c2..a819ff0 100644
--- a/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java
+++ b/odata2-jpa-processor/jpa-ref/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/model/SalesOrderItem.java
@@ -69,7 +69,7 @@ public class SalesOrderItem {
     delivered = deliveryStatus;
   }
 
-  @JoinColumn(name = "Material_Id", referencedColumnName = "MATERIAL_ID")
+  @JoinColumn(name = "Material_Id")
   @ManyToOne
   private Material material;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java b/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java
index 938e00d..256ffdd 100644
--- a/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java
+++ b/odata2-jpa-processor/jpa-web/src/main/java/org/apache/olingo/odata2/jpa/processor/ref/web/JPAReferenceServiceFactory.java
@@ -47,6 +47,7 @@ public class JPAReferenceServiceFactory extends ODataJPAServiceFactory {
     oDataJPAContext
         .setJPAEdmExtension((JPAEdmExtension) new SalesOrderProcessingExtension());
     oDataJPAContext.setPageSize(PAGE_SIZE);
+    oDataJPAContext.setDefaultNaming(false);
     setErrorLevel();
     setOnWriteJPAContent(onDBWriteContent);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Category.properties
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Category.properties b/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Category.properties
index 86d4a13..d9b44e6 100644
--- a/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Category.properties
+++ b/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Category.properties
@@ -16,7 +16,7 @@
 #        specific language governing permissions and limitations
 #        under the License.
 #-------------------------------------------------------------------------------
-query_1 = INSERT INTO T_CATEGORY (CODE,DESC) VALUES('P1','Pen');
-query_2 = INSERT INTO T_CATEGORY (CODE,DESC) VALUES('P2','Pencil');
-query_3 = INSERT INTO T_CATEGORY (CODE,DESC) VALUES('S1','Sharpner');
-query_4 = INSERT INTO T_CATEGORY (CODE,DESC) VALUES('E1','Eraser');
\ No newline at end of file
+query_1 = INSERT INTO T_CATEGORY (CODE,ID,DESC) VALUES('P1',1,'Pen');
+query_2 = INSERT INTO T_CATEGORY (CODE,ID,DESC) VALUES('P2',1,'Pencil');
+query_3 = INSERT INTO T_CATEGORY (CODE,ID,DESC) VALUES('S1',2,'Sharpner');
+query_4 = INSERT INTO T_CATEGORY (CODE,ID,DESC) VALUES('E1',3,'Eraser');
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Material.properties
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Material.properties b/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Material.properties
index 7ea5ade..653fafd 100644
--- a/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Material.properties
+++ b/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_Material.properties
@@ -17,14 +17,14 @@
 #        under the License.
 #-------------------------------------------------------------------------------
 
-material_query_1 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(111, 'My Pen', 'P1', 111.1, 'Piece');
-material_query_2 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(112, 'My Great Pen', 'P1', 112.1, 'Piece');
-material_query_3 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(113, 'Super Pen', 'P1', 113.1, 'Piece');
-material_query_4 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(114, 'Marvel Pen', 'P1', 114.1, 'Piece');
-material_query_5 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(115, 'Smooth', 'P2', 115.1, 'Piece');
-material_query_6 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(116, 'Silver Line', 'P2', 116.1, 'Piece');
-material_query_7 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(117, 'Dark Line', 'P2', 117.1, 'Piece');
-material_query_8 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(118, 'Sharp', 'S1', 118.1, 'Piece');
-material_query_9 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(119, 'Cut Sharp', 'S1', 119.1, 'Piece');
-material_query_10 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(120, 'Thin line', 'S1', 120.1, 'Piece');
-material_query_11 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, PRICE, MEASUREMENT_UNIT) values(121, 'Clean', 'E1', 121.1, 'Piece');
\ No newline at end of file
+material_query_1 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(111, 'My Pen', 'P1', 1, 111.1, 'Piece');
+material_query_2 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(112, 'My Great Pen', 'P1', 1, 112.1, 'Piece');
+material_query_3 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(113, 'Super Pen', 'P1', 1, 113.1, 'Piece');
+material_query_4 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(114, 'Marvel Pen', 'P1', 1, 114.1, 'Piece');
+material_query_5 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(115, 'Smooth', 'P2', 1, 115.1, 'Piece');
+material_query_6 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(116, 'Silver Line', 'P2', 1, 116.1, 'Piece');
+material_query_7 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(117, 'Dark Line', 'P2', 1, 117.1, 'Piece');
+material_query_8 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(118, 'Sharp', 'S1', 2, 118.1, 'Piece');
+material_query_9 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(119, 'Cut Sharp', 'S1', 2, 119.1, 'Piece');
+material_query_10 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(120, 'Thin line', 'S1', 2, 120.1, 'Piece');
+material_query_11 = insert into T_MATERIAL (MATERIAL_ID , MATERIAL_NAME, TYPE_CODE, CAT_ID, PRICE, MEASUREMENT_UNIT) values(121, 'Clean', 'E1', 3, 121.1, 'Piece');
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/13093430/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_SalesOrderHeader.properties
----------------------------------------------------------------------
diff --git a/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_SalesOrderHeader.properties b/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_SalesOrderHeader.properties
index b5ebf24..8b519bf 100644
--- a/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_SalesOrderHeader.properties
+++ b/odata2-jpa-processor/jpa-web/src/main/resources/SQL_Insert_SalesOrderHeader.properties
@@ -17,14 +17,14 @@
 #        under the License.
 #-------------------------------------------------------------------------------
 
-query1 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(1, 100, 'INR', '01', '2012-11-01 00:01:00');
-query2 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(2, 100, 'USD', '01', '2013-01-02 00:00:00');
-query3 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(3, 100, 'USD', '02', '2013-01-01 14:00:00');
-query4 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(4, 200, 'INR', '01', '2013-01-02 00:00:00');
-query5 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(5, 201, 'INR', '02', '2013-01-01 14:14:14');
-query6 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(6, 101, 'EUR', '01', '2013-01-02 00:00:00');
-query7 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(7, 201, 'EUR', '02', '2013-01-01 14:14:00');
-query8 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(8, 201, 'GBR', '01', '2013-01-02 00:00:00');
-query9 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(9, 101, 'GBR', '02', '2013-01-01 00:00:00');
-query10 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(10, 100, 'AUD', '01', '2013-01-01 00:00:00');
-query11 = insert into T_SALESORDERHEADER (SO_ID, CUST_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(11, 202, 'AUD', '02', '2013-01-02 00:00:00');
\ No newline at end of file
+query1 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(1, 100, 'INR', '01', '2012-11-01 00:01:00');
+query2 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(2, 100, 'USD', '01', '2013-01-02 00:00:00');
+query3 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(3, 100, 'USD', '02', '2013-01-01 14:00:00');
+query4 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(4, 200, 'INR', '01', '2013-01-02 00:00:00');
+query5 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(5, 201, 'INR', '02', '2013-01-01 14:14:14');
+query6 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(6, 101, 'EUR', '01', '2013-01-02 00:00:00');
+query7 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(7, 201, 'EUR', '02', '2013-01-01 14:14:00');
+query8 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(8, 201, 'GBR', '01', '2013-01-02 00:00:00');
+query9 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(9, 101, 'GBR', '02', '2013-01-01 00:00:00');
+query10 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(10, 100, 'AUD', '01', '2013-01-01 00:00:00');
+query11 = insert into T_SALESORDERHEADER (SO_ID, customer_ID, CURRENCY_CODE, DELIVERY_STATUS, creationDate) values(11, 202, 'AUD', '02', '2013-01-02 00:00:00');
\ No newline at end of file