有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在JAVA JPA Spring Boot中在一个SQL查询中选择多个数据

我有一个保存组列表的用户实体。每个组有两个列表:submissionDocumentType和reviewDocumentType。使用尽可能少的数据库调用为用户获取GroupDetails对象列表的最有效方法是什么(请参见下面的最终预期结果)

用户。java

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

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

用户组

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;

获取方法的预期响应

[
{
    "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) 个答案

  1. # 1 楼答案

    我想你可以在一个查询中完成。正如您在the reference documentation中看到的:

    Spring Data allows modeling dedicated return types, to more selectively retrieve partial views of the managed aggregates.The easiest way to limit the result of the queries to only the name attributes is by declaring an interface that exposes accessor methods for the properties to be read

    因此,我们可以使用如下查询方法获取结果:

    interface UserRepository extends Repository<User, String> {
        Collection<GroupDetails> findById(String userId);
    }