Browse Source

DATAJPA-464 - Add support for returning subtypes of Repository Entity in JpaRepository.saveAndFlush.

Adopted generic method declaration from save method to saveAndFlush.

Original pull request: #58.
pull/62/head
Thomas Darimont 12 years ago committed by Oliver Gierke
parent
commit
f5718e608c
  1. 2
      src/main/java/org/springframework/data/jpa/repository/JpaRepository.java
  2. 4
      src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java
  3. 22
      src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java

2
src/main/java/org/springframework/data/jpa/repository/JpaRepository.java

@ -67,7 +67,7 @@ public interface JpaRepository<T, ID extends Serializable> extends PagingAndSort @@ -67,7 +67,7 @@ public interface JpaRepository<T, ID extends Serializable> extends PagingAndSort
* @param entity
* @return the saved entity
*/
T saveAndFlush(T entity);
<S extends T> 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

4
src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java

@ -378,9 +378,9 @@ public class SimpleJpaRepository<T, ID extends Serializable> implements JpaRepos @@ -378,9 +378,9 @@ public class SimpleJpaRepository<T, ID extends Serializable> implements JpaRepos
* @see org.springframework.data.jpa.repository.JpaRepository#saveAndFlush(java.lang.Object)
*/
@Transactional
public T saveAndFlush(T entity) {
public <S extends T> S saveAndFlush(S entity) {
T result = save(entity);
S result = save(entity);
flush();
return result;

22
src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java

@ -55,6 +55,7 @@ import org.springframework.data.domain.Sort.Order; @@ -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 { @@ -1213,7 +1214,7 @@ public class UserRepositoryTests {
}
/**
* @DATAJPA-461
* @see DATAJPA-461
*/
@Test
public void customFindByQueryWithPositionalVarargsParameters() {
@ -1227,7 +1228,7 @@ public class UserRepositoryTests { @@ -1227,7 +1228,7 @@ public class UserRepositoryTests {
}
/**
* @DATAJPA-461
* @see DATAJPA-461
*/
@Test
public void customFindByQueryWithNamedVarargsParameters() {
@ -1240,6 +1241,23 @@ public class UserRepositoryTests { @@ -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<User> executeSpecWithSort(Sort sort) {
flushTestUsers();

Loading…
Cancel
Save