jpa:如何检查collection参数为null

时间:2015-12-22 09:37:33

标签: java jpa hql jpql

我的要求是:

  1. 如果createrIds为空
  2. ,则搜索所有数据
  3. 如果@Query("from CommodityEntity e where (:createrIds is null or e.createrEntity.id in :createrIds)" ) Page<CommodityEntity> searchByCreaterAndPage( @Param("createrIds") List<Long> createrIds,Pageable pageable); 不为空,则匹配数据
  4. 以下代码不起作用,我该如何解决?

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
    
        Intent modify_intent = new Intent(ReadData.this,Read2.class);
        HashMap<String, String> selected_item = Item_List.get(position);
        modify_intent.putExtra("item", selected_item.get(ITEM_ID));
        startActivity(modify_intent);
    
    }
    

2 个答案:

答案 0 :(得分:0)

我在(coalesce(:createrIds, null) is null or e.createrEntity.id in (:createrIds))上取得了成功,但是否可行可能取决于您使用的数据库。

答案 1 :(得分:0)

考虑将查询分为2个不同的较小查询,并在界面中使用default关键字来实施检查:

default Page<CommodityEntity> searchByCreaterAndPage( @Param("createrIds") List<Long> createrIds,Pageable pageable) {
    if (createrIds == null || createrIds.isEmpty()) {
        return searchAllByPage(pageable);
    } else {
        return searchByNonNullCreaterAndPage(createrIds, pageable);
    }
}

@Query("from CommodityEntity e where e.createrEntity.id in :createrIds" )
Page<CommodityEntity> searchByNonNullCreaterAndPage(@Param("createrIds") List<Long> createrIds, Pageable pageable);

@Query("from CommodityEntity e" )
Page<CommodityEntity> searchAllByPage(Pageable pageable);

此解决方案具有2个优点:

  • 2个简单查询可能比复杂查询更优化。
  • 它是独立于数据库的。