2016-05-04 9 views
1

私はHibernateで新しく、HibernateでCriteriaQueryを学習している間にJPQLをCriteria Queryに変換したいと思っています。私は正常にJPQLを作成することができましたが、基準で停止しました。以下は、私のシナリオです:HibernateでCriteria Queryを作成するには?

アイテム・クラス:

@Entity 
    @Table(name = "ITEM") 
    public class Item { 

     @Id 
     @GeneratedValue(strategy=GenerationType.AUTO) 
     @Column(name = "ITEM_ID") 
     private Long id = null; 

     @Version 
     @Column(name = "OBJ_VERSION") 
     private int version = 0; 

     @Column(name = "ITEM_NAME", length = 255, nullable = false, updatable = false) 
     private String name; 

     @ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL) 
     @JoinColumn(name="itemSellerId") 
     private User seller; 

     @Transient 
     private User buyer; 
........ 

ユーザークラス::罰金::実行されている

... 
@OneToMany(fetch=FetchType.EAGER, cascade = {CascadeType.PERSIST,CascadeType.MERGE}) 
     private Set<Item> boughtItems = new HashSet<Item>(); 
.. 

マイJPQLクエリ

public List<Item> findBySellerOrBuyer(Long sellerId,Long buyerId) { 
     Query query = entityManager.createQuery("select distinct i from Item i, User u " 
       + "where (i.initialPrice > 22 and i.seller.id = :sellerId) " 
       +     "OR " 
       + "(u.id = :buyerId and i member of u.boughtItems and i.initialPrice = i.reservePrice )"); 
     return (List<Item>) query.setParameter("sellerId", sellerId).setParameter("buyerId", buyerId).getResultList(); 

    } 

条件は次のとおりです。 : 一致するアイテムを取得する条件クエリ: a)Se充填剤&初期価格> 22.0 OR b)のバイヤー&予約価格=初期価格

感謝:)

CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 
     CriteriaQuery<Item> cr = builder.createQuery(Item.class); 

     Criterion price = Restrictions.gt("initial price", 22); 
     Criterion name = Restrictions.eq("seller.id","abc"); 

     Criterion Buyer = Restrictions.eq("buyer.id","abc"); 
     Criterion reserved_price = Restrictions.eq("reserved_price","initial_price"); 

     // To get records matching with AND condition for price & name 
     LogicalExpression andExp = Restrictions.and(name, price); 
     LogicalExpression andExp2 = Restrictions.and(Buyer, reserved_price); 




     return (List<Item>) ((Criteria) cr).list(); 

答えて

0

利用コード以下の最終更新日 -

Criteria cr = session.createCriteria(Item.class); 

Criterion price = Restrictions.gt("initial price", 22); 
Criterion name = Restrictions.eq("seller.id","abc"); 

Criterion Buyer = Restrictions.eq("buyer.id","abc"); 
Criterion reserved_price = Restrictions.eq("reserved_price","initial_price"); 

Disjunction objDisjunction = Restrictions.disjunction(); 
      /* Add multiple condition separated by OR clause within brackets. */ 
objDisjunction.add(Restrictions.and(price , name)); 
objDisjunction.add(Restrictions.and(Buyer, reserved_price)); 
cr.add(objDisjunction); 
List results = cr.list(); 
+0

こんにちは@Narendra私はあなたが持っているansでやった私が得られなかった唯一の事は、orExp1 OR andExp2のようなOr条件でこれらのExpressionQueryを使用する方法です。これまでに作成したクエリで質問を更新しました。ありがとう –

+0

HI @Uraz ...私は答えを更新しました。それを試してください。 –

+0

それは働いた..? –

関連する問題