diff --git a/src/main/java/org/springframework/data/gemfire/repository/support/GemfireRepositoryFactory.java b/src/main/java/org/springframework/data/gemfire/repository/support/GemfireRepositoryFactory.java index 18c0bee2..2ead125f 100644 --- a/src/main/java/org/springframework/data/gemfire/repository/support/GemfireRepositoryFactory.java +++ b/src/main/java/org/springframework/data/gemfire/repository/support/GemfireRepositoryFactory.java @@ -102,10 +102,18 @@ public class GemfireRepositoryFactory extends RepositoryFactorySupport { private GemfireTemplate getTemplate(RepositoryMetadata metadata) { + Class repositoryClass = metadata.getRepositoryInterface(); Class domainClass = metadata.getDomainType(); - GemfirePersistentEntity entity = context.getPersistentEntity(domainClass); + + GemfirePersistentEntity entity; + if (repositoryClass.isAnnotationPresent(org.springframework.data.gemfire.mapping.Region.class)) { + entity = context.getPersistentEntity(repositoryClass); + } + else { + entity = context.getPersistentEntity(domainClass); + } - Region region = regions.getRegion(domainClass); + Region region = regions.getRegion(entity.getRegionName()); if (region == null) { throw new IllegalStateException(String.format( diff --git a/src/test/java/org/springframework/data/gemfire/repository/sample/Animal.java b/src/test/java/org/springframework/data/gemfire/repository/sample/Animal.java new file mode 100644 index 00000000..53e160f4 --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/repository/sample/Animal.java @@ -0,0 +1,33 @@ +package org.springframework.data.gemfire.repository.sample; + +import org.springframework.data.annotation.Id; + +public class Animal { + + @Id + private long id; + + private String name; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Foo [id=" + id + ", name=" + name + "]"; + } + +} diff --git a/src/test/java/org/springframework/data/gemfire/repository/sample/AnimalRepositoryTest.java b/src/test/java/org/springframework/data/gemfire/repository/sample/AnimalRepositoryTest.java new file mode 100644 index 00000000..cc319464 --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/repository/sample/AnimalRepositoryTest.java @@ -0,0 +1,59 @@ +package org.springframework.data.gemfire.repository.sample; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@ContextConfiguration +@RunWith(SpringJUnit4ClassRunner.class) +public class AnimalRepositoryTest { + + @Autowired + CatRepository catRepo; + + @Autowired + DogRepository dogRepo; + + @Test + public void foo() { + + Animal felix = new Animal(); + felix.setId(1); + felix.setName("Felix"); + + Animal leo = new Animal(); + leo.setId(2); + leo.setName("Leo"); + + Animal fido = new Animal(); + fido.setId(1); + fido.setName("Fido"); + + Animal leo_ = catRepo.save(leo); + assertNotNull(leo_); + + Animal felix_ = catRepo.save(felix); + assertNotNull(felix_); + + Animal fido_ = dogRepo.save(fido); + assertNotNull(fido_); + + assertEquals(2L, catRepo.count()); + assertEquals(1L, dogRepo.count()); + + Animal foundFelix = catRepo.findOne(1L); + assertEquals(felix, foundFelix); + + Animal findOther = catRepo.findByName("Leo"); + assertEquals(leo, findOther); + + Animal foundFido = dogRepo.findBy("Fido"); + assertEquals(fido, foundFido); + } + +} diff --git a/src/test/java/org/springframework/data/gemfire/repository/sample/CatRepository.java b/src/test/java/org/springframework/data/gemfire/repository/sample/CatRepository.java new file mode 100644 index 00000000..86b07e76 --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/repository/sample/CatRepository.java @@ -0,0 +1,15 @@ +package org.springframework.data.gemfire.repository.sample; + +import org.springframework.data.gemfire.mapping.Region; +import org.springframework.data.gemfire.repository.GemfireRepository; +import org.springframework.data.gemfire.repository.Query; + +@Region("Cats") +public interface CatRepository extends GemfireRepository { + + Animal findByName(String name); + + @Query("SELECT * FROM /Foo x WHERE x.name = $1") + Animal findBy(String name); + +} diff --git a/src/test/java/org/springframework/data/gemfire/repository/sample/DogRepository.java b/src/test/java/org/springframework/data/gemfire/repository/sample/DogRepository.java new file mode 100644 index 00000000..daa32239 --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/repository/sample/DogRepository.java @@ -0,0 +1,15 @@ +package org.springframework.data.gemfire.repository.sample; + +import org.springframework.data.gemfire.mapping.Region; +import org.springframework.data.gemfire.repository.GemfireRepository; +import org.springframework.data.gemfire.repository.Query; + +@Region("Dogs") +public interface DogRepository extends GemfireRepository { + + Animal findByName(String name); + + @Query("SELECT * FROM /FooTwo x WHERE x.name = $1") + Animal findBy(String name); + +} diff --git a/src/test/resources/org/springframework/data/gemfire/repository/sample/AnimalRepositoryTest-context.xml b/src/test/resources/org/springframework/data/gemfire/repository/sample/AnimalRepositoryTest-context.xml new file mode 100644 index 00000000..4832e3eb --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/repository/sample/AnimalRepositoryTest-context.xml @@ -0,0 +1,39 @@ + + + + + + + fooRepositoryTest + localhost[11236] + config + 0 + localhost[11236] + + + + + + + + + + +