Detach result objects obtained through jpaTm().query() (#1183)

* Added TransformingTypedQuery class

Added class to wrap TypedQuery so that we can detach all objects on load.

* Don't detach non-entity results; complete tests

* Changes for review

* Make non-static and call detach directly
This commit is contained in:
Michael Muller
2021-06-01 14:20:04 -04:00
committed by GitHub
parent f6004181f8
commit 810adf0158
3 changed files with 272 additions and 2 deletions
@@ -588,6 +588,36 @@ class JpaTransactionManagerImplTest {
.contains("Inserted/updated object reloaded: ");
}
@Test
void query_detachesResults() {
jpaTm().transact(() -> jpaTm().insertAll(moreEntities));
jpaTm()
.transact(
() ->
jpaTm().query("FROM TestEntity", TestEntity.class).getResultList().stream()
.forEach(e -> assertThat(jpaTm().getEntityManager().contains(e)).isFalse()));
jpaTm()
.transact(
() ->
jpaTm()
.query("FROM TestEntity", TestEntity.class)
.getResultStream()
.forEach(e -> assertThat(jpaTm().getEntityManager().contains(e)).isFalse()));
jpaTm()
.transact(
() ->
assertThat(
jpaTm()
.getEntityManager()
.contains(
jpaTm()
.query(
"FROM TestEntity WHERE name = 'entity1'", TestEntity.class)
.getSingleResult()))
.isFalse());
}
private void insertPerson(int age) {
jpaTm()
.getEntityManager()