gpt4 book ai didi

jpa - 如何按集合值查询实体

转载 作者:行者123 更新时间:2023-12-04 03:39:36 25 4
gpt4 key购买 nike

我正在使用 jpa 并且我有以下实体:

@Entity
@Table(name="favorites_folders")
public class FavoritesFolder {

private static final long serialVersionUID = 1L;

@Id
private String id;

@NotNull
@Size(min = 1, max = 50)
public String name;

@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(
name="favorites_products",
joinColumns=@JoinColumn(name="folder_id")
)
@Column(name="product_id")
@NotNull
private Set<String> productsIds = new HashSet<String>();
}

我想要做的是得到一套 FavoritesFolder在其 productsIds 中包含字符串“favorite-id”的实体成员集。

有谁知道如何在 中完成标准 API ?

更新:
我认为以下 sql 应该可以解决问题,但我不确定如何在 JPQL 中执行此操作或 Criteria API :
select * from favorites_folders join favorites_products on favorites_folders.id = favorites_products.folder_id where favorites_products.product_id = 'favorite-id'

最佳答案

要使用标准 api 获取一组在其 productsIds 成员集中包含字符串“favorite-id”的 FavoritesFolder 实体,您应该执行以下操作:

CriteriaBuilder cb = em.getCriteriaBuilder(); //em is EntityManager
CriteriaQuery<FavoritesFolder> cq = cb.createQuery(FavoritesFolder.class);
Root<FavoritesFolder> root = cq.from(FavoritesFolder.class);

Expression<Collection<String>> productIds = root.get("productsIds");
Predicate containsFavoritedProduct = cb.isMember("favorite-id", productIds);

cq.where(containsFavoritedProduct);

List<FavoritesFolder> favoritesFolders = em.createQuery(cq).getResultList();

更多信息 Collections in JPQL and Criteria Queries .

关于jpa - 如何按集合值查询实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708809/

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