gpt4 book ai didi

jpa - 在(Collection) 方法中使用 JPA 规范时没有返回结果

转载 作者:行者123 更新时间:2023-12-04 08:10:15 24 4
gpt4 key购买 nike

我正在尝试使用 Spring Data JPA 规范实现此 SQL 查询的等效项:

SELECT * FROM product WHERE category_id IN (....)
此查询中涉及的两个实体具有 OneToManyManyToOne关系:
产品实体:
@Data
@NoArgsConstructor
@Entity
@Table(name = "PRODUCT")
public class ProductEntity extends AbstractAuditableEntity {

// skipped other properties for simplicity sake

@ManyToOne
private CategoryEntity categoryEntity;

}
类别实体:
@Entity
@Table(name = "PRODUCT_CATEGORY")
@Data
public class CategoryEntity extends AbstractBaseEntity {

// skipped other properties for simplicity sake

@OneToMany(mappedBy = "categoryEntity")
private List<ProductEntity> productEntities;

}
我的 JPA 规范查询编译和运行没有任何错误,但不返回任何结果:
规范定义:
public static Specification<ProductEntity> inCategories(List<Long> categories) {
return (root, query, builder) -> {
if (categories != null && !categories.isEmpty()) {
final Path<CategoryEntity> category = root.get("categoryEntity");
return category.get("id").in(categories);
} else {
// always-true predicate, means that no filtering would be applied
return builder.and();
}
};
}
客户端代码:
    Page<ProductEntity> productEntityPage = productRepository.findAll(Specification
.where(ProductSpecifications.inCategories(filterCriteria.getCategories()))
, pageRequest);
为什么不起作用?我在使用 SQL 语句查询数据库时得到结果,因此我的 JPA 规范查询或实体映射肯定有问题。
我错过了什么?

最佳答案

我认为你应该在这里使用 join

Join<ProductEntity, CategoryEntity> categoryJoin = root.join("categoryEntity");
return categoryJoin.get("id").in(categories);
代替
Path<CategoryEntity> category = root.get("categoryEntity");
return category.get("id").in(categories);
root.get("categoryEntity").get("id");不会给你任何东西,因为在 product.categoryEntity.id 中不存在这样的路径( product ) table 。

关于jpa - 在(Collection<?>) 方法中使用 JPA 规范时没有返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66010614/

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