Jpa 有效地查询和组合来自多个表的排序分页结果
我有一个成员层次结构——组织和用户。组织可能包含其他组织或用户。一个组织或用户只是一个组织的成员(1:N)。层次结构存储在表成员中。表组织包含组织数据,用户包含用户数据:Jpa 有效地查询和组合来自多个表的排序分页结果,jpa,spring-data-jpa,spring-data,Jpa,Spring Data Jpa,Spring Data,我有一个成员层次结构——组织和用户。组织可能包含其他组织或用户。一个组织或用户只是一个组织的成员(1:N)。层次结构存储在表成员中。表组织包含组织数据,用户包含用户数据: CREATE TABLE member( member_id CHARACTER VARYING(255) NOT NULL, parent_member_id CHARACTER VARYING(255), ... ); CREATE TABLE organization ( member_
CREATE TABLE member(
member_id CHARACTER VARYING(255) NOT NULL,
parent_member_id CHARACTER VARYING(255),
...
);
CREATE TABLE organization (
member_id CHARACTER VARYING(255) NOT NULL,
name CHARACTER VARYING(255) NOT NULL,
...
);
CREATE TABLE user (
member_id CHARACTER VARYING(255) NOT NULL,
username CHARACTER VARYING(255) NOT NULL,
first_name CHARACTER VARYING(255) NOT NULL,
last_name CHARACTER VARYING(255) NOT NULL,
...
);
我需要创建一个端点,该端点将返回某个成员的直接成员的排序分页列表。返回的列表应包含组织和用户的混合。我使用spring数据(JPARepository)。我可以实现它的最简单的方法是查询表Organization(使用成员上的联接),然后查询表user(使用成员上的联接),然后合并结果集。但是多个顺序查询似乎没有多大效果。有更好的办法吗?例如,用并行查询替换两个查询?或者在单个查询中获取结果集?请告知。先谢谢你 您可以在
JPA
继承中使用join策略。为成员
表创建一个类成员
,为用户
表和组织
创建两个类用户
,扩展成员
类
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Member {
@Id
public String memberId;
@ManyToOne
public Member parentMember;
//getters and setters
}
@Entity
public class User extends Member {
private String username;
private String firstName;
private String lastName;
//getters and setters
}
@Entity
public class Organization extends Member {
private String name;
//getters and setters
}
然后为成员
类创建Spring数据存储库
:
public interface MemberRepository extends JpaRepository<Member, String> {
List<Member> findByParentMember(Member parent);
Page<Member> findByParentMember(Member parent, Pagable pageable);
}
public interface MemberRepository扩展了JpaRepository{
列出findByParentMember(成员父级);
PageFindByParentMember(成员父级,可分页);
}
通过这种方式,hibernate将在所有3个表之间创建一个连接查询,而不是在两个表之间创建两个连接查询,从而返回所有成员(用户和组织)