swi*_*ler 8 java sql pivot jpa querydsl
我们在项目中使用JPA2,Spring Data和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{...}
Run Code Online (Sandbox Code Playgroud)
1..n for Actitivy to ActivityName - 活动可能有不同的名称(例如跑步,慢跑)
一个人可能对某个特定活动具有一定的水平,并且可以执行多个活动(每个活动都有一个定义的级别).
示例以下数据:
搜索"跑步"或"跳舞"的人应该得到这样的结果:
Person[Name] ActitiyName ActivityLevel ActitiyName ActivityLevel Sum
Bob running 0.7 dancing 0.1 0.8
Mary running 0.5 0.5
Run Code Online (Sandbox Code Playgroud)
我的问题:是否有JPA QL/QueryDSL方法通过一个表达式/投影得到这样的结果?我已经拥有的是一个多步骤的解决方案 - 选择活动名称和级别,执行分组并与Java8求和.如果我使用querydsl进行分组,我不会获得单级条目.反之亦然,在我的解决方案中,我必须执行其他几个步骤.
很高兴知道这是否可以通过使用查询.
纯 JPA 和 QueryDsl 仅适用于实体。因此,您可以创建一个数据库视图来聚合您正在查找的数据并将其映射到一个新实体,您可以简单地查询该实体。
另一个解决方案是使用 QueryDsl 的本机 jpa 查询支持。请参阅http://www.querydsl.com/static/querydsl/3.6.1/reference/html/ch02.html下半部分。您将需要最低的段落(查询并投影到 DTO 中)。
归结为:
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |