|
16 | 16 | package org.springframework.data.jpa.repository.support; |
17 | 17 |
|
18 | 18 | import static org.assertj.core.api.Assertions.*; |
| 19 | +import static org.mockito.BDDMockito.then; |
| 20 | +import static org.mockito.Mockito.never; |
| 21 | +import static org.mockito.Mockito.reset; |
19 | 22 |
|
20 | 23 | import jakarta.persistence.EntityManager; |
21 | 24 | import jakarta.persistence.OptimisticLockException; |
|
32 | 35 | import org.junit.jupiter.api.BeforeEach; |
33 | 36 | import org.junit.jupiter.api.Test; |
34 | 37 | import org.junit.jupiter.api.extension.ExtendWith; |
| 38 | +import org.mockito.Mockito; |
35 | 39 | import org.springframework.beans.factory.annotation.Autowired; |
36 | 40 | import org.springframework.data.jpa.domain.sample.PersistableWithIdClass; |
37 | 41 | import org.springframework.data.jpa.domain.sample.PersistableWithIdClassPK; |
@@ -65,14 +69,17 @@ class JpaRepositoryTests { |
65 | 69 |
|
66 | 70 | @PersistenceContext EntityManager em; |
67 | 71 |
|
| 72 | + private EntityManager spiedEntityManager; |
| 73 | + |
68 | 74 | private JpaRepository<SampleEntity, SampleEntityPK> repository; |
69 | 75 | private CrudRepository<PersistableWithIdClass, PersistableWithIdClassPK> idClassRepository; |
70 | 76 | private JpaRepository<VersionedUser, Long> versionedUserRepository; |
71 | 77 | private NamedParameterJdbcOperations jdbcOperations; |
72 | 78 |
|
73 | 79 | @BeforeEach |
74 | 80 | void setUp() { |
75 | | - repository = new JpaRepositoryFactory(em).getRepository(SampleEntityRepository.class); |
| 81 | + spiedEntityManager = Mockito.spy(em); |
| 82 | + repository = new JpaRepositoryFactory(spiedEntityManager).getRepository(SampleEntityRepository.class); |
76 | 83 | idClassRepository = new JpaRepositoryFactory(em).getRepository(SampleWithIdClassRepository.class); |
77 | 84 | versionedUserRepository = new JpaRepositoryFactory(em).getRepository(VersionedUserRepository.class); |
78 | 85 | jdbcOperations = new NamedParameterJdbcTemplate(dataSource); |
@@ -219,6 +226,18 @@ void deleteDirtyManagedVersionedEntityShouldRaiseOptimisticLockException() { |
219 | 226 | jdbcOperations.update("delete from VersionedUser", Map.of()); |
220 | 227 | } |
221 | 228 |
|
| 229 | + @Test //GH-3401 |
| 230 | + void deleteNonVersionedEntityShouldNotInvokeMerge() { |
| 231 | + SampleEntity entity = new SampleEntity("one", "eins"); |
| 232 | + repository.save(entity); |
| 233 | + repository.flush(); |
| 234 | + em.detach(entity); |
| 235 | + |
| 236 | + reset(spiedEntityManager); |
| 237 | + repository.delete(entity); |
| 238 | + then(spiedEntityManager).should(never()).merge(entity); |
| 239 | + } |
| 240 | + |
222 | 241 | private interface SampleEntityRepository extends JpaRepository<SampleEntity, SampleEntityPK> { |
223 | 242 |
|
224 | 243 | } |
|
0 commit comments