如何在JPA / DB2中动态添加Where条件

时间:2016-12-15 21:51:53

标签: java jpa db2

目前我有一个java应用程序正在查询DB2 10.5数据库并使用JPA 2.0作为包装器。我有一个工作查询,可以很好地获取我需要的数据。但是,除了添加动态参数之外,我需要第二个查询与第一个查询完全相同。他们的查询足够大(并且有几个类似的),似乎大量的重复,列出相同的查询基本上两次,但有一个包含额外的条件和一个不让我尝试给我例如:

在我的orm.xml中(我们倾向于使用named-query和named-native-query)我有以下命名查询:

select dates
       from DateTable dates, Product p
       where dates.id = p.id
       and ... <multiple conditions etc>

我的第二个查询将与上面的内容完全相同,除了 将从代码中获取动态参数:

select dates
      from DateTable, Product p
      where dates.id = p.id
      and p.id = :someDynamicIdHere
      and ... <multiple conditions etc>

我想将它们组合成一个JPA可以理解的orm.xml定义。要清楚,当someDynamicIdHere不为null时,我想在条件“和p.id =:someDynamicIdHere”中添加额外的条件。我已经尝试了CASE / WHEN / THEN / END,但我过去使用的只是列操作,而不是动态更新where子句。这是可能的,如果是这样,语法是什么?谢谢你的帮助! -Doug

1 个答案:

答案 0 :(得分:3)

使用条件API:

date_default_timezone_set('Asia/Kolkata');
$del_time           = $this->input->post('bid_time');   //for ex '2016-12-01 12:30:00';
$now                = date('Y-m-d H:i:s');
$loc_del_date_time  = strtotime($del_time);
$loc_curr_date_time = strtotime($now);
$loc_mid_time       = ($loc_del_date_time + $loc_curr_date_time) / 2;
$loc_mid_time       = round($loc_mid_time);
echo $loc_new_date  = date('Y-m-d H:i:s', $loc_mid_time);