【发布时间】:2019-02-10 15:52:36
【问题描述】:
我有两个实体 Outlet 和 products 具有如下一对多关系-
@Entity
public class Outlet{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long id;
@Fetch (FetchMode.SELECT)
@OneToMany(mappedBy = "outletProduct",fetch = FetchType.LAZY)
List<Product> products;
和
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
Boolean isActive;
@ManyToOne
@JoinColumn(name = "outletId")
Outlet outletProduct;
现在我想要产品 isactive 为 true 的 Outlets。
我正在编写以下 JPQL 为-
@Query("Select op From Outlet op join op.products pro where pro.isActive=1 order by op.id")
List<Outlet> findAllByVarietiesPriceTimePeriodIn( );
但是我仍然在销售产品 isactive false。 请提出建议。
我想获得来自这个 sql 查询的结果-
SELECT * FROM outlet join product on product.outlet_id= outlet.id where product.is_active=1 ;
【问题讨论】:
-
想发布真实的 JPQL?因为您发布的内容无效
WHERE AND pro pro .isActive=1。完成后,发布您选择的 JPA 提供程序在数据库中执行的 SQL(在 JPA 提供程序日志中) -
@BillyFrost 更新了 JPQL 请检查。
-
查询将返回所有 Outlet,其中至少有一个 Product 的活动值为 1。这就是您所要求的
-
@BillyFrost 不,这不是我想要的,请检查更新后的问题的结果..我只想要那些有与其对应的有效产品的商店..
-
正如我已经说过的,如果您不了解结果,请查看为任何 JPQL 查询执行的生成 SQL。您提议的 SQL 仍然可以返回
Outlet,其中有一个处于非活动状态的Product(如果它也有一个处于活动状态的)。
标签: spring jpa spring-data-jpa jpql