Java 在JPA中如何使用用例

Java 在JPA中如何使用用例,java,jpa,Java,Jpa,我是JPA新手,有以下JPA查询: String qry = " SELECT e from Event e" + " WHERE e.meeting.meetingDate= :pdate" + " AND e.meeting.feedId IN (1,2)" + " AND e.status <> 'W'" + " AND

我是JPA新手,有以下JPA查询:

String qry = " SELECT e from Event e"
                    + " WHERE e.meeting.meetingDate= :pdate"
                    + " AND e.meeting.feedId IN (1,2)"
                    + " AND e.status <> 'W'"
                    + " AND e.meeting.status ='A'"
                    + " AND e.settleStatus is NULL"
                    + " AND e.offTime is NULL"
                    + " AND e.eventCode >'07:45:00'"
                    + " group by e.id";
String qry=“从事件e中选择e”
+“其中e.meeting.meetingDate=:pdate”
+“和(1,2)中的e.meeting.feedId”
+“和e.状态‘W’”
+“和e.meeting.status='A'”
+“而e.settleStatus为空”
+“和e.offTime为空”
+“和e.eventCode>'07:45:00'”
+“按e.id分组”;
我需要动态地添加ORDER BY子句。我使用MySQL,请任何人告诉我如何使用JPA将以下条件添加到我的查询中


要添加的部件:

ORDER BY
 CASE  WHEN m.country_code ='AU' THEN  e.timestamp_updated               
       WHEN m.country_code <> 'AU' THEN  e.event_code  
END DESC  
orderby
当m.country_code='AU'然后e.timestamp_更新时的情况
当m.country\u代码为“AU”时,则e.event\u代码
结束描述

如何将此查询段添加到我的JPA查询中?

因为JPA 2.0,所以在JPQL中可以使用CASE

所以你只需要做这样的事情:

ORDER BY 
  CASE 
    WHEN (e.property = ?) THEN 1
    WHEN (e.property = ?) THEN 2
    ELSE 3 
END DESC  
您还可以使用标准API

Criteria criteria = session.createCriteria(YourEntity.class);
if(clause){
   criteria.addOrder( Order.asc("property_desired_1") );
}else{
  criteria.addOrder( Order.asc("property_desired_2") );
} 
criteria.list();

您可以使用更多关于条件、关于JPQL CASE WHEN和关于Order的信息

为其创建一个过程,然后通过entityManager.createNativeQuery(storedProcedure)调用此过程;你能用一个例子来解释或帮助我吗?创建一个存储过程很简单,之后我会告诉你下一步,尽管JPA2.x在JPQL中支持
CASE
,但在
ORDER by
子句中不支持它。不过,这可能没有引起注意,因为Hibernate的JPQL实现确实支持
CASE
中的
orderby