我将一个应用程序从QueryDSL 3迁移到QueryDSL 4,我完成了大部分工作,但我仍然在努力处理两件我无法迁移的事情。
在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()
不可用。有没有办法做到这一点?
在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()
操作的方法。有没有等价的?