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();
こんにちは@Narendra私はあなたが持っているansでやった私が得られなかった唯一の事は、orExp1 OR andExp2のようなOr条件でこれらのExpressionQueryを使用する方法です。これまでに作成したクエリで質問を更新しました。ありがとう –
HI @Uraz ...私は答えを更新しました。それを試してください。 –
それは働いた..? –