|
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