2016-05-04 6 views
1

Ich bin neu in Hibernate, ich möchte die JPQL in Criteria Query übersetzen, während ich die CriteriaQuery in Hibernate erlerne. Ich bin erfolgreich in der Lage, das JPQL zu schaffen, aber wurde in den Kriterien gestoppt. Im Anschluss ist mein Szenario:So erstellen Sie Kriterienabfrage in Hibernate?

Klasse:

@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; 
........ 

Klasse User ::

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

Meine JPQL Abfrage, die feinen ::

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(); 

    } 

die Bedingung ausgeführt wird: : Eine Kriterienabfrage, die Elemente erhält, die übereinstimmen: a) Die Se ller & ein Anfangspreis> 22,0 OR b) Der Käufer & ein reservierter Preis = Anfangspreis

Dank :)

Last Update

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(); 

Antwort

0

Verwenden Sie den folgenden Code -

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

hi @ Narendra Ich habe mit der ans Sie getan haben pr Das einzige, was ich nicht bekommen habe, ist, wie man diese ExpressionQuery in der Oder-Bedingung wie: andExp1 OR undExp2 verwendet. Ich habe die Frage mit der Abfrage aktualisiert, die ich bisher erstellt habe. Danke –

+0

HI @Uraz ... Ich habe die Antwort aktualisiert. Versuchen Sie es. –

+0

Hat es funktioniert ..? –

Verwandte Themen