在QueryDSL 4

时间:2017-12-01 17:20:06

标签: querydsl

我将一个应用程序从QueryDSL 3迁移到QueryDSL 4,我完成了大部分工作,但我仍然在努力处理两件我无法迁移的事情。

.stringValue()

在QueryDSL 3中,我有:

SubQueryExpression<String> uuidsSubQuery = new HibernateSubQuery()
   .from(qEntity)
   .where(qEntity.id.eq(1))
   .unique(qEntity.uuid.stringValue());

qEntity.uuid的类型为UUID(PostgreSQL数据库),在类java.util.UUID中映射为QEntity。但是,我稍后在投影中使用我的子查询,我需要子查询返回String,而不是UUID,这就是我使用.stringValue()的原因。

在queryDSL 4中,我尝试了以下内容:

JPQLQuery<String> uuidsSubQuery = JPAExpressions.selectFrom(qEntity)
   .where(qEntity.id.eq(1))
   .select(qEntity.uuid.stringValue());

但方法.stringValue()不可用。有没有办法做到这一点?

.castToNum()和.divide()

在QueryDSL 3中:

NumberExpression<Long> countEntities1 = new HibernateSubQuery().from(qEntity).where(XXXXXX).unique(qEntity.count());

NumberExpression<Long> countEntities2 = new HibernateSubQuery().from(qEntity).where(YYYYYY).unique(qEntity.count()); 

new HibernateUpdateClause(session, qZZZZ)
    .set(
         ZZZZ.count,
         countEntities1.castToNum(BigDecimal.class).divide(countEntities2)
    )
    .execute();

但是在QueryDSL 4中,我没有找到在我的两个子查询之间应用castToNum(BigDecimal.class).divide()操作的方法。有没有等价的?

0 个答案:

没有答案