“订购”;“案例栏”;在JPA中
我想按案例陈述订购,可以吗?我怎么做“订购”;“案例栏”;在JPA中,jpa,jpql,Jpa,Jpql,我想按案例陈述订购,可以吗?我怎么做 SELECT new com.systemname.to.UserDataHolder(u.userId, CASE WHEN (u.place.cityId = :cityId) THEN 1 WHEN (u.place.stateId = :stateId) THEN 2 ELSE 3 END) FROM User u ORDER BY u.userId DESC 现在无法进行测试,所以我不确定这是否是有效的语法,但您能在其中添加一个“
SELECT new com.systemname.to.UserDataHolder(u.userId,
CASE WHEN (u.place.cityId = :cityId) THEN 1 WHEN (u.place.stateId = :stateId) THEN 2 ELSE 3 END)
FROM User u
ORDER BY u.userId DESC
现在无法进行测试,所以我不确定这是否是有效的语法,但您能在其中添加一个“AS”吗
您使用的是什么JPA提供商 试试看 或者
第二种方法可以很好地工作,但仅在一种情况下,所需的时间比应该的要长。我所做的是,我在Java中设置了CASE值,并将CASE仅放在orderby子句上。它比应用程序上的旧SQL运行得更完美、更快。至少JPA没有明确规定这一点(还没有?)。有关JPA 3.0规范的更改,请参见一些广告:
SELECT new com.systemname.to.UserDataHolder(u.userId,
CASE
WHEN (u.place.cityId = :cityId) THEN 1
WHEN (u.place.stateId = :stateId) THEN 2
ELSE 3 END as myNum)
FROM User u
ORDER BY u.userId, myNum DESC
SELECT u.userId,
(CASE
WHEN (u.place.cityId = :cityId) THEN 1
WHEN (u.place.stateId = :stateId) THEN 2
ELSE 3 END) as myNum
FROM User u
ORDER BY u.userId, myNum DESC
SELECT new com.systemname.to.UserDataHolder(u.userId,
CASE
WHEN (u.place.cityId = :cityId) THEN 1
WHEN (u.place.stateId = :stateId) THEN 2
ELSE 3 END)
FROM User u
ORDER BY u.userId, CASE
WHEN (u.place.cityId = :cityId) THEN 1
WHEN (u.place.stateId = :stateId) THEN 2
ELSE 3 END DESC