1

ここに休止状態のDetachedCriteriaコードがあります。java.util.ArrayList cannot be cast to java.lang.Longアプリケーションを実行すると、基本的に私がここで行っているのは、ホテルと税金のリストが 2 つあるということです。ここでのロジックは、ホテルと税金が指定されている場合、必要なデータをロードすることです! それらがすべてロードされていない場合!ホテルを選択せず​​、税金を選択したままにすると、上記のエラーが表示されます。ホテルを選択して税金を空のままにすると、期待どおりの結果が得られます。

//Use if hotel is specified
    if(searchCriteria.getHotel().getId() != null){
        dc.add(Restrictions.eq("h.id", searchCriteria.getHotel().getId()));
    }else if(hotels != null && !hotels.isEmpty()){
        Collection<Long> hotelIds = new ArrayList<Long>();
        for(Hotel h : hotels){
            hotelIds.add(h.getId());
        }
        dc.add(Restrictions.eq("h.id",hotelIds));
    }

    //use if tax is specified
    if(searchCriteria.getTax().getId() != null){
        dc.add(Restrictions.eq("t.id", searchCriteria.getTax().getId()));
    }else if(tax != null && !tax.isEmpty()){
        Collection<Long> taxIds = new ArrayList<Long>();
        for(Tax t : tax){
            taxIds.add(t.getId());
        }
        dc.add(Restrictions.eq("t.id",taxIds));
    }

    //Order Result
    dc.addOrder(Order.asc("h.id"));
    dc.addOrder(Order.asc("t.code"));

私がここでやっている間違いを教えてください!

4

1 に答える 1

7

Restrictions.in("t.id",taxIds)コレクションのアイテムをマッチングする際に使用します。

ここでRestrictions.eq("t.id",taxIds)、taxIds は ArrayList で、t.id は Long であるため、 java.util.ArrayList を java.lang.Long例外にキャストできません。

于 2013-03-08T11:58:17.367 に答える