Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JPA/QueryDSL获得类似Pivot的结果_Java_Sql_Jpa_Pivot_Querydsl - Fatal编程技术网

Java 使用JPA/QueryDSL获得类似Pivot的结果

Java 使用JPA/QueryDSL获得类似Pivot的结果,java,sql,jpa,pivot,querydsl,Java,Sql,Jpa,Pivot,Querydsl,我们在项目中使用JPA2、Spring数据和QueryDSL。我有以下表格和相关JPA实体: table Person (id, ...) table Activity (id, type, ...) @Entity @Configurable public class Activity { @ElementCollection @CollectionTable(joinColumns = @JoinColumn(name = "ACTIVITY_ID")) @NotEm

我们在项目中使用JPA2、Spring数据和QueryDSL。我有以下表格和相关JPA实体:

table Person (id, ...) 

table Activity (id, type, ...)

@Entity
@Configurable
public class Activity {
   @ElementCollection
   @CollectionTable(joinColumns = @JoinColumn(name = "ACTIVITY_ID"))
   @NotEmpty
   @Valid
   private Set<ActivityName> names = new HashSet<>();

table ActivityName(activity_id, name, ...) 

@Embeddable
  @Immutable
  @Table(uniqueConstraints = @UniqueConstraint(columnNames = "NAME"))
  public static class ActivityName { ... }

table ActivityLevel(person_id, activity_id, level) 

@Entity
@Immutable
@Validated
public final class ActivityLevel{...}
我的问题:有没有JPA QL/QueryDSL方法可以通过one表达式/投影获得这样的结果?我已经有了一个多步骤的解决方案——选择活动名称和级别,使用Java8执行分组和求和。如果使用querydsl进行分组,则不会得到单级条目。反之亦然,在我的解决方案中,我必须执行其他几个步骤


如果只通过使用查询就可以做到这一点,那就太好了

纯JPA&QueryDsl仅适用于实体。 因此,您可以创建一个db视图来聚合您正在查找的数据,并将其映射到一个新实体,您可以简单地进行查询

另一个解决方案是使用QueryDsl的原生jpa查询支持。 见下半部分。您需要最低的段落(查询并投影到DTO中)

归结起来是:

  • 通过指向db(模式)生成Q类(我不确定为什么需要它,但它在文档中)
  • 使用com.mysema.query.jpa.sql.JPASQLQuery类构造查询
  • 确保在列表方法中列出查询中所有必需的结果字段
  • 创建一个DTOBean类,您可以将结果投影到该类
  • 将结果投影到dto类

谢谢您的回答。在这种情况下,动态数据库应该如何工作?对不起,我不熟悉这个。
Person[Name]   ActitiyName  ActivityLevel ActitiyName  ActivityLevel  Sum
Bob             running         0.7         dancing         0.1       0.8
Mary            running         0.5                                   0.5