【问题标题】:Hibernate filter on ManytoOne mapping多对一映射上的休眠过滤器
【发布时间】:2021-09-10 10:25:00
【问题描述】:
@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;
}

当我运行声明性方法 findByUser(Long userId) 它抛出错误说 alert.product 不存在

有什么方法可以获取

类似

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

【问题讨论】:

    标签: hibernate spring-data-jpa hibernate-session hibernate-filters


    【解决方案1】:

    你不能只使用这样的查询吗?

    @Query("from AlertNotificationUserJpaEntity alertNotif where alertNotif.alert.product in :products")
    public findAllByProduct(@Param("product") List<Long> products);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多