diff --git a/pom.xml b/pom.xml
index 10a0f160..ca18d91c 100755
--- a/pom.xml
+++ b/pom.xml
@@ -339,6 +339,7 @@
src/test/resources/customerhistory_table.json
src/test/resources/installation_table.json
src/test/resources/auditable_user_table.json
+ src/test/resources/person_table.json
${dynamodblocal.port}
${project.build.directory}/dynamodb-dist
diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java
index 4d0c0125..15664ffa 100644
--- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java
+++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCreator.java
@@ -74,11 +74,15 @@ protected DynamoDBQueryCriteria addCriteria(DynamoDBQueryCriteria
PropertyPath leafNodePropertyPath = part.getProperty().getLeafProperty();
String leafNodePropertyName = leafNodePropertyPath.toDotPath();
+ //TODO #114 - is this correct?
+ //TODO max deepth of 32 supported by AWS
+ /*
if (leafNodePropertyName.indexOf(".") != -1)
{
+
int index = leafNodePropertyName.lastIndexOf(".");
leafNodePropertyName = leafNodePropertyName.substring(index);
- }
+ }*/
switch (part.getType()) {
diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/Address.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/Address.java
new file mode 100644
index 00000000..cbebff25
--- /dev/null
+++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/Address.java
@@ -0,0 +1,22 @@
+package org.socialsignin.spring.data.dynamodb.repository.query.nested;
+
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBDocument;
+
+@DynamoDBDocument
+public class Address {
+ private String city;
+ private String country;
+
+ public String getCity() {
+ return city;
+ }
+ public void setCity(String city) {
+ this.city = city;
+ }
+ public String getCountry() {
+ return country;
+ }
+ public void setCountry(String country) {
+ this.country = country;
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/NestedPropertiesIT.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/NestedPropertiesIT.java
new file mode 100644
index 00000000..b5bbcdc0
--- /dev/null
+++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/NestedPropertiesIT.java
@@ -0,0 +1,59 @@
+package org.socialsignin.spring.data.dynamodb.repository.query.nested;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.socialsignin.spring.data.dynamodb.core.ConfigurationTI;
+import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = {ConfigurationTI.class, NestedPropertiesIT.TestAppConfig.class})
+public class NestedPropertiesIT {
+
+ @Configuration
+ @EnableDynamoDBRepositories(basePackages = "org.socialsignin.spring.data.dynamodb.query.nested")
+ public static class TestAppConfig {
+ }
+
+ @Autowired
+ private PersonRepository personRepository;
+
+ @Test
+ public void testNestedProperty() {
+
+ Address usaAddress = new Address();
+ usaAddress.setCity("New York");
+ usaAddress.setCountry("USA");
+
+ Address deAddress = new Address();
+ deAddress.setCity("Frankfurt");
+ deAddress.setCity("Germany");
+
+ Person p1 = new Person();
+ p1.setName("personName");
+ p1.setPhone("phone");
+ p1.setArea("area");
+ p1.setAddress(usaAddress);
+
+ Person p2 = new Person();
+ p2.setName("otherName");
+ p2.setPhone("42");
+ p2.setArea("otherArea");
+ p2.setAddress(deAddress);
+
+/// personRepository.save(p1);
+
+ List actual = personRepository.findByAddressCountry("USA");
+ assertEquals(1, actual.size());
+
+ actual = personRepository.findByPhone("42");
+ assertEquals(1, actual.size());
+ }
+}
diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/Person.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/Person.java
new file mode 100644
index 00000000..903860fd
--- /dev/null
+++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/Person.java
@@ -0,0 +1,50 @@
+package org.socialsignin.spring.data.dynamodb.repository.query.nested;
+
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
+import org.springframework.data.annotation.Id;
+
+@DynamoDBTable(tableName = "Person")
+public class Person {
+
+ @Id
+ private PersonId personId;
+
+ private String phone;
+ private Address address;
+
+ @DynamoDBHashKey
+ public String getName() {
+ return personId != null ? personId.getName() : null;
+ }
+
+ @DynamoDBRangeKey
+ public String getArea() {
+ return personId != null ? personId.getArea() : null;
+ }
+ public Address getAddress() {
+ return address;
+ }
+ public String getPhone() {
+ return phone;
+ }
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+ public void setName(String name) {
+ if (personId == null) {
+ personId = new PersonId();
+ }
+ this.personId.setName(name);
+ }
+ public void setArea(String area) {
+ if (personId == null) {
+ personId = new PersonId();
+ }
+ this.personId.setArea(area);
+ }
+ public void setAddress(Address address) {
+ this.address = address;
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/PersonId.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/PersonId.java
new file mode 100644
index 00000000..e51d82b5
--- /dev/null
+++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/PersonId.java
@@ -0,0 +1,38 @@
+package org.socialsignin.spring.data.dynamodb.repository.query.nested;
+
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
+import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
+
+import java.io.Serializable;
+
+public class PersonId implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private String name;
+ private String area;
+
+ @DynamoDBRangeKey
+ public String getArea() {
+ return area;
+ }
+
+ @DynamoDBHashKey
+ public String getName() {
+ return name;
+ }
+
+ public PersonId() {}
+
+ public PersonId(String name, String area) {
+ this.name = name;
+ this.area = area;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public void setArea(String area) {
+ this.area = area;
+ }
+}
+
diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/PersonRepository.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/PersonRepository.java
new file mode 100644
index 00000000..7416bb19
--- /dev/null
+++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/nested/PersonRepository.java
@@ -0,0 +1,21 @@
+package org.socialsignin.spring.data.dynamodb.repository.query.nested;
+
+import org.socialsignin.spring.data.dynamodb.repository.EnableScan;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
+
+public interface PersonRepository extends PagingAndSortingRepository {
+
+ Person findByNameAndArea(@Param("name") String name, @Param("area") String area);
+
+ @EnableScan
+ List findByArea(@Param("area") String area);
+
+ @EnableScan
+ List findByPhone(@Param("phone") String phone);
+
+ @EnableScan
+ List findByAddressCountry(@Param("country") String country);
+}
\ No newline at end of file
diff --git a/src/test/resources/person_table.json b/src/test/resources/person_table.json
new file mode 100755
index 00000000..a6953561
--- /dev/null
+++ b/src/test/resources/person_table.json
@@ -0,0 +1,27 @@
+{
+ "AttributeDefinitions": [
+ {
+ "AttributeName": "Name",
+ "AttributeType": "S"
+ },
+ {
+ "AttributeName": "Area",
+ "AttributeType": "S"
+ }
+ ],
+ "KeySchema": [
+ {
+ "AttributeName": "Name",
+ "KeyType": "HASH"
+ },
+ {
+ "AttributeName": "Area",
+ "KeyType": "RANGE"
+ }
+ ],
+ "ProvisionedThroughput": {
+ "ReadCapacityUnits": "10",
+ "WriteCapacityUnits": "10"
+ },
+ "TableName": "person"
+}
\ No newline at end of file