Java JPA QueryDSL存在并计数

Java JPA QueryDSL存在并计数,java,sql,jpa,querydsl,Java,Sql,Jpa,Querydsl,我正在尝试将这些SQL语句添加到QueryDSL调用中 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

我正在尝试将这些SQL语句添加到QueryDSL调用中

   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
有人能给我一个提示或解决办法吗

这是我的域名(摘录):

@实体
公共类资产对象{
@身份证
@列(name=“ASO\u ID”)
私有长asoId;
@许多
@OrderColumn(name=“ASP\U订单”)
@JoinTable(name=“ASSETOBJECT\u PARENTS”,joinColumns={@JoinColumn(name=“ASO\u ID”,referencedColumnName=“ASO\u ID”)},inverseJoinColumns={@JoinColumn(name=“CTD\u ID”,referencedColumnName=“CTD\u ID”)})
private List parents=new ArrayList();
}
@实体
公共类分类数据{
@身份证
@列(name=“CTD\u ID”)
私人长途电话;
}
@实体
@表(name=“资产\单位数据”)
公共类资产数据{
@身份证
@列(name=“ASD_ID”)
私人的,长期的;
@许多
@JoinTable(name=“ASSETDATA\u CATEGORYDATA”,joinColumns={@JoinColumn(name=“ASD\u ID”,referencedColumnName=“ASD\u ID”)},inverseJoinColumns={@JoinColumn(name=“CTD\u ID”,referencedColumnName=“CTD\u ID”)})
私有列表CategoryCatalist=新的ArrayList();
}

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

这里是解决方案的示意图

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);
QAssetobject t=QAssetobject.assetobject;
QAssetData ad=QAssetData.assetData;
QAssetobjectParents p=QAssetobjectParents.assetobjectParents;
列表结果=query.from(t)
.leftJoin(ad.on)(t.asdId.eq(ad.asdId))
.where(新建SQLSubQuery().from(p)
其中(t.asoId.eq(p.asoId),p.ctdId.eq(1)).exists())
.groupBy(t.asdId)
.orderBy(通配符.count.desc(),t.asdId.asc())
.list(t.asdId,通配符.count);

您自己尝试过吗?你在哪里?是的,我试过了。但我在很多方面都失败了:存在于assetobject_parents上->这是一个多对多关系的连接表,从一个表中选择一个id和计数,…感谢您的帮助,但我没有QAssetobjectParents类。这只是一个多对多联接表。我想这就是问题所在。好的,我还将提供一个JPA解决方案,实际上是JPA解决方案。我需要更多关于您的域的信息。e、 g.AssetobjectParents作为一个实体看起来如何?是否可以在querydsl中使用联接表?添加了我的域的摘录。
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);