Во время обновления моего сервиса с Spring Boot 3.1 до Spring Boot 3.2 один из моих интеграционных тестов начал давать сбой. Сначала тест создает такую структуру данных:
- parent
- child
- grandchild
- grandchild
Если я теперь использую метод репозиторий.findAll для каждого репозитория, я получу:
- Parent(id=1, type=TYPE, value=42)
- Child(id=1, parentId=1, field=value)
- Grandchild(id=1, childId=1, data=stack)
- Grandchild(id=2, childId=1, data=overflow)
Однако взгляните на этот пользовательский запрос с соединениями:
@Query(value = "SELECT * FROM grandchild gc " +
"INNER JOIN child c ON c.id = gc.child_id " +
"INNER JOIN parent p ON p.id = c.parent_id " +
"WHERE de.type = :type AND de.value = :value " +
"ORDER BY gc.id")
List findAllGrandchildren(@Param(value = "type") String type,
@Param(value = "value") String value);
Если я запущу этот запрос во время теста, я получу двух внуков, как и ожидалось, но они оба будут иметь одинаковый идентификатор (но правильные данные)?
- Grandchild(id=1, childId=1, data=stack)
- Grandchild(id=1, childId=1, data=overflow)
Если я запускаю тест вместе с другими тестами (но очищаю БД после каждого теста), я также вижу такое состояние:
- Parent(id=3, type=TYPE, value=42)
- Child(id=3, parentId=3, field=value)
- Grandchild(id=3, childId=3, data=stack)
- Grandchild(id=3, childId=3, data=overflow)
Хотя репозитарий.findAll для внуков вернулся:
- Grandchild(id=5, childId=3, data=stack)
- Grandchild(id=6, childId=3, data=overflow)
Я пытался выполнить подобный запрос, который дал тот же результат, что и findAll
@Query(value = "SELECT * FROM grandchild")
List findAllGrandchildren
Я также снова попробовал findAllGrandchildren, но вместо SELECT * я использовал SELECT gc. Я ожидал получить тот же результат, что и findAll, но получил:
- Grandchild(id=null, childId=null, data=null)
- Grandchild(id=null, childId=null, data=null)
Это меня озадачило. В чем может быть причина того, что пользовательский запрос с объединениями возвращает идентификаторы, которых нет в выходных данных репозитория.findAll?
EDIT
Родительский класс
@Data
@Builder
@AllArgsConstructor
@Table("parent")
public class Parent {
@Id
private Long id;
private String type;
private Long value;
private HashSet children;
}
Child.class
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@Table("child")
public class Child {
@Id
private Long id;
private Long parentId;
private String field;
}
Внук.класс
@Data
@Builder
@AllArgsConstructor
@Table("grandchild")
public class Grandchild {
@Id
private Long id;
private Long childId;
private String data;
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... test-after
Репозиторий Spring возвращает объекты с идентификаторами, которые не должны существовать в тесте после Spring Boot 3.2. ⇐ JAVA
Программисты JAVA общаются здесь
1719820257
Anonymous
Во время обновления моего сервиса с Spring Boot 3.1 до Spring Boot 3.2 один из моих интеграционных тестов начал давать сбой. Сначала тест создает такую структуру данных:
- parent
- child
- grandchild
- grandchild
Если я теперь использую метод репозиторий.findAll для каждого репозитория, я получу:
- Parent(id=1, type=TYPE, value=42)
- Child(id=1, parentId=1, field=value)
- Grandchild(id=1, childId=1, data=stack)
- Grandchild(id=2, childId=1, data=overflow)
Однако взгляните на этот пользовательский запрос с соединениями:
@Query(value = "SELECT * FROM grandchild gc " +
"INNER JOIN child c ON c.id = gc.child_id " +
"INNER JOIN parent p ON p.id = c.parent_id " +
"WHERE de.type = :type AND de.value = :value " +
"ORDER BY gc.id")
List findAllGrandchildren(@Param(value = "type") String type,
@Param(value = "value") String value);
Если я запущу этот запрос во время теста, я получу двух внуков, как и ожидалось, но они оба будут иметь одинаковый идентификатор (но правильные данные)?
- Grandchild(id=1, childId=1, data=stack)
- Grandchild(id=1, childId=1, data=overflow)
Если я запускаю тест вместе с другими тестами (но очищаю БД после каждого теста), я также вижу такое состояние:
- Parent(id=3, type=TYPE, value=42)
- Child(id=3, parentId=3, field=value)
- Grandchild(id=3, childId=3, data=stack)
- Grandchild(id=3, childId=3, data=overflow)
Хотя репозитарий.findAll для внуков вернулся:
- Grandchild(id=5, childId=3, data=stack)
- Grandchild(id=6, childId=3, data=overflow)
Я пытался выполнить подобный запрос, который дал тот же результат, что и findAll
@Query(value = "SELECT * FROM grandchild")
List findAllGrandchildren
Я также снова попробовал findAllGrandchildren, но вместо SELECT * я использовал SELECT gc. Я ожидал получить тот же результат, что и findAll, но получил:
- Grandchild(id=null, childId=null, data=null)
- Grandchild(id=null, childId=null, data=null)
Это меня озадачило. В чем может быть причина того, что пользовательский запрос с объединениями возвращает идентификаторы, которых нет в выходных данных репозитория.findAll?
[b]EDIT[/b]
Родительский класс
@Data
@Builder
@AllArgsConstructor
@Table("parent")
public class Parent {
@Id
private Long id;
private String type;
private Long value;
private HashSet children;
}
Child.class
@Data
@Builder
@Accessors(chain = true)
@AllArgsConstructor
@Table("child")
public class Child {
@Id
private Long id;
private Long parentId;
private String field;
}
Внук.класс
@Data
@Builder
@AllArgsConstructor
@Table("grandchild")
public class Grandchild {
@Id
private Long id;
private Long childId;
private String data;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78690862/spring-repository-returning-entities-with-ids-that-shouldnt-exist-in-test-after[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия