如何 select 多个数据合而为一 SQL 在 JAVA JPA 中查询 Spring Boot
How to select multiple data in one SQL Query in JAVA JPA Spring Boot
我有一个包含组列表的用户实体。每个组都有两个列表: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;
用户组
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"
]
}
]
我想您可以在一次查询中完成。正如您在 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);
}
我有一个包含组列表的用户实体。每个组都有两个列表: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;
用户组
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"
]
}
]
我想您可以在一次查询中完成。正如您在 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);
}