Как выбрать несколько данных в одном SQL-запросе в JAVA JPA Spring Boot - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть пользовательский объект, который содержит список групп.Каждая группа имеет два списка: submissionDocumentType и reviewDocumentType.Каков наиболее эффективный способ получить список объектов GroupDetails для пользователя, используя как можно меньше вызовов базы данных (см. Окончательный ожидаемый результат ниже)?

User.java

public class User {
@Id
@GeneratedValue(generator ="uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;

@ManyToMany(mappedBy = "users")
private Set<UserGroup> userGroups;

UserGroup

public class UserGroup {

@Id
@GeneratedValue(generator ="uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;

@ManyToMany(mappedBy = "submissionUserGroups")
private List <DocumentType> submissionDocumentType;


@ManyToMany(mappedBy = "reviewUserGroups")
private List <DocumentType> reviewDocumentType;

GroupDetails.java

public class GroupDetails {

private String groupTitle;
private List<String> reviewDocTypes;
private List<String> submitDocTypes;

Ожидаемый ответ от метода GET

[
{
    "groupTitle": "Group one",
    "reviewDocTypes": [
        "Prasymas Eazy",
        "Prasymas Tgwz",
        "Prasymas Gien",
        "Prasymas Docs",
        "Prasymas Ecyd",
        "Prasymas Sjvz"
    ],
    "submitDocTypes": [
        "Prasymas Buor",
        "Prasymas Kzhc",
        "Prasymas Zokx",
        "Prasymas Vvtb",
        "Prasymas Docs",
        "Prasymas Lutj",
        "atostogu prasymas"
    ]
},
{
    "groupTitle": "Group two",
    "reviewDocTypes": [
        "Prasymas Tgwz",
        "Prasymas Gien",
        "Prasymas Kzhc",
        "Prasymas Kblj",
        "Prasymas Docs",
        "Prasymas Ecyd"
    ],
    "submitDocTypes": [
        "Prasymas Tgwz",
        "Prasymas Wmwx",
        "Prasymas Buor",
        "Prasymas Gien",
        "Prasymas Kzhc",
        "Prasymas Kblj",
        "Prasymas Docs",
        "Prasymas Xdau",
        "Prasymas Lutj",
        "Prasymas Ecyd",
        "atostogu prasymas"
    ]
}
]

1 Ответ

0 голосов
/ 22 февраля 2019

Полагаю, вы можете сделать это одним запросом.Как вы можете видеть в справочной документации :

Spring Data позволяет моделировать выделенные типы возвращаемых данных, чтобы более избирательно получать частичные представления управляемых агрегатов. Самый простой способ ограничить результатзапросов только к атрибутам имени - объявлением интерфейса, который предоставляет методы доступа для свойств, которые должны быть прочитаны

Таким образом, мы можем получить результат, используя метод запроса, подобный этому:

interface UserRepository extends Repository<User, String> {
    Collection<GroupDetails> findById(String userId);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...