0
@FilterDef(name = CommonConstants.PRODUCT_FILTER, parameters = {@ParamDef(name="products", type = "long")})
@Filter(name = CommonConstants.PRODUCT_FILTER, condition = "alert.product in (:products)")
@NoArgsConstructor
@SuperBuilder
public class AlertNotificationUserJpaEntity extends AbstractJpaEntity {
    @Column(name = "USER_ID")
    private Long user;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "ALERT_ID")
    private AlertJpaEntity alert;
}



@FilterDef(name = CommonConstants.PRODUCT_FILTER, parameters = {@ParamDef(name="products", type = "long")})
@Filter(name =  CommonConstants.PRODUCT_FILTER, condition = "PRODUCT_ID in (:products)")
@Table(name = "alert")
@NoArgsConstructor
@SuperBuilder
public class AlertJpaEntity extends AbstractJpaEntity {

    private static final long serialVersionUID = 1L;

    @Column(name = "PARENT")
    private Long parent;

    @Column(name = "PRODUCT_ID")
    private Long product;

    @Column(name = "SUBPRODUCT_ID")
    private Long subProduct;
}

When I run a declarative method findByUser(Long userId) it throws error saying alert.product does not exists

is there any way to fetch

something like

select alertNotif from AlertNotificationUserJpaEntity alertNotif inner join AlertJpaEntity alert on alertNotif.alert.id = alert.id where alert.product in (:product)

1 Answers1

0

Can't you just use a query like this?

@Query("from AlertNotificationUserJpaEntity alertNotif where alertNotif.alert.product in :products")
public findAllByProduct(@Param("product") List<Long> products);
Christian Beikov
  • 15,141
  • 2
  • 32
  • 58