复杂JPA规范编写(涉及继承)

时间:2016-08-10 15:51:24

标签: hibernate jpa spring-data jpa-2.0 spring-data-jpa

我对Spring-Data相当陌生(直到最近才通过HQL使用Hibernate)并且我无法绕过以下内容:

我有一个 AbstractUser 实体,由用户管理员分组。我还有产品实体,与项目的关系为1-n。我的用户被分配了对特定项目的访问权限,因此用户具有项目的1-n。另一方面,管理员管理整个产品行,因此管理员产品中有1-n。

现在,我正在制作一个显示所有用户的表格(用户管理员)。我需要能够通过特定项目对其进行过滤。这意味着对于给定的项目,我需要显示分配给它的所有用户(简单)和管理给定的所有管理员 项目的父产品(不那么简单)。我还需要此表格为可分页

所以我理解我的UserRepository需要实现JpaSpecificationExecutor,我需要编写一个规范,以便调用UserRepository.findAll(projectUsersSpecification(projectFilter),可分页)的内容,但我不知道如何写规格!我在网上寻找过例子,但我发现的任何内容都不包括我的具体情况!

非常感谢任何帮助!

非常感谢,

AW

这里有一些代码:

@MappedSuperclass
public abstract class PersistentEntity implements Serializable {

  @Id
  @GeneratedValue
  private Long id;

  ... getter/setter equals & hashcode ...
}

@Entity
@Inheritance
@DiscriminatorColumn(name="TYPE")
@Table(name="User")
public class AbstractUser extends PersistentEntity {

  public enum Profile {
      USER,
      ADMIN;
  }

  @Column
  @Enumerated(EnumType.STRING)
  private Profile profile;

  ...
}

@Entity
@DiscriminatorValue("USER")
public class User extends AbstractUser {

  @ManyToMany(fetch = FetchType.EAGER)
  private List<Project> projects;

}

@Entity
@DiscriminatorValue("ADMIN")
public class Admin extends AbstractUser {

  @ManyToMany(fetch = FetchType.EAGER)
  private List<Product> products;
}

@Entity
@Table
public class Product extends PersistentEntity {

  @OneToMany(fetch = FetchType.EAGER)
  private List<Project> projects;
}

0 个答案:

没有答案