gpt4 book ai didi

java - 如何在 Hibernate 中创建条件查询?

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:01 24 4
gpt4 key购买 nike

我是 Hibernate 的新手,我想在学习 Hibernate 中的 CriteriaQuery 时将 JPQL 转换为 Criteria Query。我成功地创建了 JPQL,但在标准中被停止。以下是我的场景:

项目类别:

    @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) 卖方 & 初始价格 > 22.0或者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();

最佳答案

使用下面的代码 -

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

关于java - 如何在 Hibernate 中创建条件查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com