【问题标题】:JPA QueryDSL exists and countJPA QueryDSL 存在并计数
【发布时间】:2015-02-18 04:36:59
【问题描述】:

我正在尝试将这些 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

谁能给我一个提示或解决方案?

这是我的域(摘录):

@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 访问连接表。

【问题讨论】:

  • 您自己尝试过吗?你在哪里被打动了?
  • 是的,我试过了。但我在很多方面都失败了:assetobject_parents 上存在 -> 这是一个多对多关系的连接表,选择一个 id 并从一个表中计数,...

标签: java sql jpa querydsl


【解决方案1】:

这是一个解决方案的草图

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);

【讨论】:

  • 感谢您的帮助,但我没有 QAssetobjectParents 类。这只是一个多对多连接表。我认为这就是问题所在。
  • 好的,我也提供一个JPA解决方案
  • 实际上对于 JPA 解决方案,我需要有关您的域的更多信息。例如AssetobjectParents 作为一个实体看起来如何?
  • 是否可以在 querydsl 中使用连接表?
  • 添加了我的域的摘录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2012-11-09
  • 2017-04-06
  • 2019-05-31
  • 2016-08-04
  • 2016-02-17
相关资源
最近更新 更多