diff --git a/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java b/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java index 55cf6c3c7..c7d0b5f1c 100644 --- a/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java +++ b/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java @@ -67,7 +67,7 @@ public interface JpaRepository extends PagingAndSort * @param entity * @return the saved entity */ - T saveAndFlush(T entity); + S saveAndFlush(S entity); /** * Deletes the given entities in a batch which means it will create a single {@link Query}. Assume that we will clear diff --git a/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java b/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java index c9800a002..9f4390002 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java @@ -378,9 +378,9 @@ public class SimpleJpaRepository implements JpaRepos * @see org.springframework.data.jpa.repository.JpaRepository#saveAndFlush(java.lang.Object) */ @Transactional - public T saveAndFlush(T entity) { + public S saveAndFlush(S entity) { - T result = save(entity); + S result = save(entity); flush(); return result; diff --git a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index ad00f68cb..e4cf534ca 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -55,6 +55,7 @@ import org.springframework.data.domain.Sort.Order; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.sample.Address; import org.springframework.data.jpa.domain.sample.Role; +import org.springframework.data.jpa.domain.sample.SpecialUser; import org.springframework.data.jpa.domain.sample.User; import org.springframework.data.jpa.repository.sample.UserRepository; import org.springframework.test.context.ContextConfiguration; @@ -1213,7 +1214,7 @@ public class UserRepositoryTests { } /** - * @DATAJPA-461 + * @see DATAJPA-461 */ @Test public void customFindByQueryWithPositionalVarargsParameters() { @@ -1227,7 +1228,7 @@ public class UserRepositoryTests { } /** - * @DATAJPA-461 + * @see DATAJPA-461 */ @Test public void customFindByQueryWithNamedVarargsParameters() { @@ -1240,6 +1241,23 @@ public class UserRepositoryTests { assertThat(result, hasItems(firstUser, secondUser)); } + /** + * @see DATAJPA-464 + */ + @Test + public void saveAndFlushShouldSupportReturningSubTypesOfRepositoryEntity() { + + repository.deleteAll(); + SpecialUser user = new SpecialUser(); + user.setFirstname("Thomas"); + user.setEmailAddress("thomas@example.org"); + + SpecialUser savedUser = repository.saveAndFlush(user); + + assertThat(user.getFirstname(), is(savedUser.getFirstname())); + assertThat(user.getEmailAddress(), is(savedUser.getEmailAddress())); + } + private Page executeSpecWithSort(Sort sort) { flushTestUsers();