首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA QueryDSL存在并计数

JPA QueryDSL存在并计数
EN

Stack Overflow用户
提问于 2014-12-19 17:08:03
回答 1查看 11.5K关注 0票数 4

我正在尝试将这些SQL语句发送到QueryDSL调用。

代码语言:javascript
复制
   select t.asd_id, count(*) as count from asset_object t 
     left join asset_data ad on (t.asd_id = ad.asd_id)
     where
       exists (select * from assetobject_parents p 
               where t.aso_id = p.aso_id and p.ctd_id = 1)
     group by t.asd_id
     order by count(*) desc, t.asd_id asc

有人能给我一个提示或解决方案吗?

这是我的域名(摘录):

代码语言:javascript
复制
@Entity
public class AssetObject {

    @Id
    @Column(name = "ASO_ID")
    private Long asoId;


    @ManyToMany
    @OrderColumn(name = "ASP_ORDER")
    @JoinTable(name = "ASSETOBJECT_PARENTS", joinColumns = { @JoinColumn(name = "ASO_ID", referencedColumnName="ASO_ID") }, inverseJoinColumns = { @JoinColumn(name = "CTD_ID", referencedColumnName="CTD_ID") })
    private List<CategoryData> parents = new ArrayList<CategoryData>();

}

@Entity
public class CategoryData {

    @Id
    @Column(name = "CTD_ID")
    private Long ctdId;

}


@Entity
@Table(name = "ASSET_DATA")
public class AssetData {

    @Id
    @Column(name = "ASD_ID")
    private Long asdId;

    @ManyToMany
    @JoinTable(name = "ASSETDATA_CATEGORYDATA", joinColumns = { @JoinColumn(name = "ASD_ID", referencedColumnName="ASD_ID") }, inverseJoinColumns = { @JoinColumn(name = "CTD_ID", referencedColumnName="CTD_ID") })
    private List<CategoryData> categoryDataList = new ArrayList<CategoryData>();

}

希望这能帮到更多的忙。我认为主要的一点是不可能用querydsl访问连接表。

EN

回答 1

Stack Overflow用户

发布于 2014-12-21 03:31:19

这是一个解决方案的草图

代码语言:javascript
复制
QAssetobject t = QAssetobject.assetobject;
QAssetData ad = QAssetData.assetData;
QAssetobjectParents p = QAssetobjectParents.assetobjectParents;

List<Tuple> results = query.from(t)
  .leftJoin(ad).on(t.asdId.eq(ad.asdId))
  .where(new SQLSubQuery().from(p)
         .where(t.asoId.eq(p.asoId), p.ctdId.eq(1)).exists())
  .groupBy(t.asdId)
  .orderBy(Wildcard.count.desc(), t.asdId.asc())
  .list(t.asdId, Wildcard.count);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27562708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档